You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Crontab每小时自动Git Push时SSH密码无法自动输入的问题

解决Git SSH自动认证问题,实现无密码Crontab定时备份

老兄,你这个问题我之前也碰到过——用send mypassword\r wait这种方式给Git的SSH连接传密码根本没用,因为Git调用的SSH客户端不会从这种简单的模拟输入里读取密码,而且明文写密码在脚本里绝对是个安全隐患。别慌,咱们用最标准安全的方式搞定它:

第一步:配置SSH密钥对,实现无密码认证

这是解决SSH自动认证的最优方案,步骤超简单:

  • 在你的服务器上执行ssh-keygen -t ed25519(优先用ed25519算法,比老的RSA更安全),全程按回车就行,千万不要设置密钥密码——不然定时任务执行时还是会弹窗要求输入密码。
  • 找到生成的公钥文件~/.ssh/id_ed25519.pub,把里面的内容复制到你的Git仓库服务器(比如GitHub、GitLab)的账号SSH密钥设置里。
  • 测试一下:执行ssh git@你的仓库域名,如果能直接连上不要求输密码,那这步就成功了。

第二步:修复你的backup.sh脚本

原来的脚本有两个小问题,我给你改好了:

#!/bin/bash
# 先把项目目录定义成变量,维护起来更方便
PROJECT_DIR="/home/user/share/my_project"

# 进入项目目录,自动提交所有变更,备注里带上准确的时间戳
cd "$PROJECT_DIR" && git commit -a -m "Hourly crontab backup: $(date '+%Y-%m-%d %H:%M:%S')"

# 推送指定分支到远程仓库
git push origin branch1
  • 原来的'date'只是把字符串提交了,用$(date '+%Y-%m-%d %H:%M:%S')才能插入当前的准确时间。
  • 不用重复cd到目录,只要第一次cd成功,后面的git命令都会在这个目录执行。
  • 删掉那个没用的send命令,密钥认证已经不需要密码了。

第三步:给脚本加权限并测试

  • 先给脚本添加执行权限:chmod +x backup.sh。
  • 手动运行一遍./backup.sh,确认不需要输入密码就能完成提交和推送——这步一定要测试,没问题再配置定时任务。

第四步:配置Crontab定时任务

执行crontab -e打开定时任务编辑器,添加一行:

0 * * * * /home/user/你的脚本路径/backup.sh >> /var/log/git_backup.log 2>&1
  • 0 * * * *代表每小时的第0分钟执行一次,刚好符合你的每小时备份需求。
  • 后面的>> /var/log/git_backup.log 2>&1是把脚本的输出和错误信息都写到日志文件里,万一出问题了方便排查。

额外提醒

  • 确保你的SSH密钥文件权限是600,.ssh目录权限是700——权限太松的话SSH会拒绝使用该密钥。
  • 如果非要给SSH密钥设置密码(比如担心密钥泄露),可以用ssh-agent配合ssh-add,但配置起来比较麻烦,定时任务还要处理agent的环境变量,不太适合新手,所以还是推荐无密码密钥用于定时任务场景。

内容的提问来源于stack exchange,提问作者Shijin TR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:29:31