Etckeeper自动推送Git提交时反复要求输入账号密码的问题
etckeeper自动推送GitHub的凭据验证问题
问题描述
我尝试将etckeeper针对/etc目录变更生成的所有提交自动推送到GitHub仓库。当/etc目录有变更时,etckeeper会自动创建提交,我编写了如下脚本实现自动推送:
#!/bin/sh set -e sudo git -C /etc push -u origin master
现在执行sudo etckeeper commit "message"或安装软件触发提交时,提交会立即推送,但存在一个问题:每次推送都会要求输入用户名和密码,即便跳过或输入随机内容,推送仍能成功。我不清楚为何会出现这种要求验证凭据的情况,希望有人能提供帮助。
原因分析
- 已有有效凭据在起作用:系统可能已经通过SSH密钥、Git凭据管理器缓存的有效信息完成了验证,输入提示只是Git的交互流程被触发,但实际验证用的是已存在的合法凭据,所以随便输入或跳过都能推送成功。
- 远程仓库URL配置冲突:如果仓库同时配置了HTTPS和SSH地址,或者HTTPS地址里嵌入了用户名(比如
https://username@github.com/xxx/xxx.git),Git会触发密码提示,但实际用SSH密钥完成了推送(SSH优先级更高或已提前配置)。 - sudo环境的凭据隔离:用
sudo执行git时,当前用户的凭据缓存不会被root环境读取,但root用户可能已经配置了SSH密钥,所以推送能成功,而提示是因为root环境下的Git没找到凭据缓存,触发了默认交互流程。
解决办法
1. 配置root用户使用SSH连接GitHub
- 切换到root用户:
sudo -i - 生成SSH密钥对(若未生成):
ssh-keygen -t ed25519 -C "root@your-hostname" - 将
/root/.ssh/id_ed25519.pub中的公钥内容添加到GitHub账户的SSH密钥列表 - 修改/etc目录的Git远程地址为SSH格式:
sudo git -C /etc remote set-url origin git@github.com:your-username/your-repo.git
2. 给root用户配置Git凭据缓存(HTTPS方式适用)
- 切换到root用户:
sudo -i - 设置临时缓存(比如缓存1小时):
git config --global credential.helper 'cache --timeout=3600' - 或者永久存储凭据(注意明文存储风险):
git config --global credential.helper store,凭据会保存在/root/.git-credentials文件中
3. 简化推送脚本
-u origin master参数仅需第一次推送时使用,后续推送可以简化脚本:
#!/bin/sh set -e sudo git -C /etc push origin master
内容的提问来源于stack exchange,提问作者Rocksteady
相关产品推荐
相关产品推荐

