git-push-authentication.md 3.4 KB

Git Push 认证配置指南

问题分析

从日志可以看到,systemd 服务在尝试推送时遇到认证失败:

fatal: could not read Username for 'https://git.dewofaurora.de': No such device or address

这是因为 systemd 服务在非交互式环境下运行,无法提示输入用户名和密码。

解决方案

方案 1: 使用 Git Credential Store(推荐用于个人服务器)

在服务器上执行以下命令:

# 1. 配置全局 credential helper
git config --global credential.helper store

# 2. 手动推送一次以保存凭据
cd /opt/vmess-domain-rotator  # 或者你的应用目录
git push vmess-domain-rotator runtime-state:runtime-state

# 系统会提示输入用户名和密码,输入后会被保存到 ~/.git-credentials

方案 2: 使用 Git Credential Cache(临时缓存)

# 缓存凭据 1 小时(3600秒)
git config --global credential.helper 'cache --timeout=3600'

# 第一次推送需要输入凭据
git push vmess-domain-rotator runtime-state:runtime-state

方案 3: 使用 Personal Access Token(推荐用于 Git 服务器)

如果你的 Git 服务器支持 Personal Access Token:

# 1. 在 Git 服务器上生成 Token(如 GitLab: Settings -> Access Tokens)

# 2. 使用 Token 作为密码
# 方法 A: 在推送时使用 Token URL
git remote set-url vmess-domain-rotator https://username:TOKEN@git.dewofaurora.de/aurora/vmess-domain-rotator.git

# 方法 B: 使用 credential store
git config --global credential.helper store
# 然后推送时用户名输入你的用户名,密码输入 Token

方案 4: 使用 SSH URL(推荐用于生产环境)

如果你的 Git 服务器支持 SSH:

# 1. 切换远程 URL 为 SSH
git remote set-url vmess-domain-rotator git@git.dewofaurora.de:aurora/vmess-domain-rotator.git

# 2. 确保 systemd 用户有 SSH 密钥
sudo -u vmessrotator ssh-keygen -t ed25519 -C "vmess-domain-rotator@localhost"

# 3. 将公钥添加到 Git 服务器
sudo -u vmessrotator cat /home/vmessrotator/.ssh/id_ed25519.pub
# 复制公钥内容,然后在 Git 服务器的 SSH Keys 设置中添加

# 4. 测试 SSH 连接
sudo -u vmessrotator ssh -T git@git.dewofaurora.de

# 5. 测试推送
sudo -u vmessrotator git push vmess-domain-rotator runtime-state:runtime-state

验证配置

配置完成后,测试 systemd 服务:

# 手动触发服务
sudo systemctl start vmess-domain-rotator.service

# 查看日志
sudo journalctl -u vmess-domain-rotator.service -n 50

# 确认看到 "pushed to vmess-domain-rotator/runtime-state" 或类似成功消息

推荐方案

根据你的情况,建议使用 方案 1 (Git Credential Store)

  1. 简单易用,无需 SSH 密钥配置
  2. 持久化存储,重启后仍有效
  3. 适合个人服务器环境

执行步骤:

# 在服务器上以服务用户身份执行
sudo -u vmessrotator bash << 'EOF'
cd /opt/vmess-domain-rotator  # 或你的应用目录
git config --global credential.helper store
git push vmess-domain-rotator runtime-state:runtime-state
# 输入用户名和密码后,凭据会被保存
EOF

安全建议

  1. 不要在共享服务器上使用 credential store:如果服务器有其他用户,考虑使用 SSH 方案
  2. 定期轮换凭据:建议每 90 天更换一次密码或 Token
  3. 使用最小权限 Token:如果使用 Token,只授予 write_repository 权限
  4. 监控推送日志:定期检查是否有异常推送记录