从日志可以看到,systemd 服务在尝试推送时遇到认证失败:
fatal: could not read Username for 'https://git.dewofaurora.de': No such device or address
这是因为 systemd 服务在非交互式环境下运行,无法提示输入用户名和密码。
在服务器上执行以下命令:
# 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
# 缓存凭据 1 小时(3600秒)
git config --global credential.helper 'cache --timeout=3600'
# 第一次推送需要输入凭据
git push vmess-domain-rotator runtime-state:runtime-state
如果你的 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
如果你的 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):
执行步骤:
# 在服务器上以服务用户身份执行
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
write_repository 权限