AWS EC2运行Git操作shell脚本如何免输凭据设置cron定时自动执行
解决方案
以下是3种可实现Git自动认证的方案,按安全性从高到低排序,可按需选择:
方案1:SSH密钥认证(最推荐,无明文凭据泄露风险)
- 在EC2实例上执行命令生成SSH密钥对:
ssh-keygen -t ed25519 -C "ec2-cron-nlp",全程按回车不需要设置密钥密码 - 执行命令
cat ~/.ssh/id_ed25519.pub,复制输出的公钥内容 - 打开GitHub对应私有仓库的设置页,找到「Deploy keys」选项,粘贴刚才复制的公钥,务必勾选允许写入权限后保存
- 回到EC2实例的仓库目录,将远程地址从HTTPS格式切换为SSH格式:
git remote set-url origin git@github.com:你的GitHub用户名/你的仓库名.git - 手动执行一次
git pull,无需输入密码即代表配置生效,原有脚本不需要任何修改即可直接供cron定时调用
方案2:Git全局凭据存储(中等安全,凭据存储在本地)
- 先在GitHub后台生成带有对应仓库读写权限的个人访问令牌(PAT),生成时勾选全部
repo相关权限 - 回到EC2实例执行命令开启全局凭据存储:
git config --global credential.helper store - 手动执行一次
git pull,用户名输入GitHub用户名,密码输入刚才生成的PAT,输入完成后凭据会自动保存在本地~/.git-credentials文件中 - 后续所有Git操作都不需要再手动输入认证信息,原有脚本可直接使用
方案3:脚本内嵌令牌(快速实现,风险最高,仅建议测试环境使用)
该方案直接把认证信息写入脚本,注意不要将修改后的脚本上传到任何公开位置,避免令牌泄露:
#!/bin/sh # 替换为你仓库的绝对路径,避免cron环境变量问题 cd /home/你的EC2用户名/code/NLP # 替换占位符为你的GitHub用户名、PAT、仓库地址 git pull https://你的GitHub用户名:你的PAT令牌@github.com/你的GitHub用户名/你的仓库名.git # 替换为python3的绝对路径,可执行which python3获取路径 /usr/bin/python3 main.py git add * git commit -m "raspberry pi run" git push https://你的GitHub用户名:你的PAT令牌@github.com/你的GitHub用户名/你的仓库名.git master
额外提示:cron任务运行时的环境变量和登录用户的环境变量不一致,建议把脚本内所有相对路径、命令路径都替换为绝对路径,降低执行失败概率。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

