# Git Push 认证配置指南 ## 问题分析 从日志可以看到,systemd 服务在尝试推送时遇到认证失败: ``` fatal: could not read Username for 'https://git.dewofaurora.de': No such device or address ``` 这是因为 systemd 服务在非交互式环境下运行,无法提示输入用户名和密码。 ## 解决方案 ### 方案 1: 使用 Git Credential Store(推荐用于个人服务器) 在服务器上执行以下命令: ```bash # 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(临时缓存) ```bash # 缓存凭据 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: ```bash # 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: ```bash # 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 服务: ```bash # 手动触发服务 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. 适合个人服务器环境 执行步骤: ```bash # 在服务器上以服务用户身份执行 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. **监控推送日志**:定期检查是否有异常推送记录