【问题标题】:git push via cron + ssh-agent (no password)通过 cron + ssh-agent 进行 git push(无密码)
【发布时间】:2016-06-30 03:10:53
【问题描述】:

既然已经出现了,就想把相关的帖子弄出来:

权限被拒绝(公钥);不是我的问题:

最接近的,是什么让我到了现在,但不适合我:

what 的最后一个没有任何指示,确切地说,导致最佳答案被标记为已解决,但我对建议的故障排除脚本或手动无密码/ssh-没有任何问题基于代理的推送到 github。

我有一个写入日志的 python 文件,我想每分钟自动从我的树莓派推送到 github。这是脚本:

~/dir/script
export HOME=/home/uname
cd /home/uname/dir/
echo $HOME
pwd
whoami
python2 ./python-script.py
git commit -am "update"
git push

当我手动运行它时,我得到以下输出:

$ ./script 
/home/uname
/home/uname/dir
uname
done ### print from script
[master 0db9599] update
 1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 306 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To uname@github.com:uname/repo.git
   def0bed..0db9599  master -> master

所以,一切看起来都很棒!

这是 crontab 行(通过 crontab -e 作为我的普通用户编辑):

*/1 * * * * /home/uname/dir/script

这是cron 运行后我的journalctl 日志:

CROND[13791]: pam_unix(crond:session): session closed for user uname
crond[13862]: pam_unix(crond:session): session opened for user uname by (uid=0)
CROND[13863]: (uname) CMD (/home/uname/dir/script)
CROND[13862]: (uname) CMDOUT (/home/uname)
CROND[13862]: (uname) CMDOUT (/home/uname/dir
CROND[13862]: (uname) CMDOUT (uname)
CROND[13862]: (uname) CMDOUT (done)
CROND[13862]: (uname) CMDOUT ([master 4fd590d] update)
CROND[13862]: (uname) CMDOUT ( 1 file changed, 1 insertion(+), 1 deletion(-))
CROND[13862]: [50B blob data]
CROND[13862]: (uname) CMDOUT (fatal: Could not read from remote repository.)
CROND[13862]: (uname) CMDOUT ()
CROND[13862]: (uname) CMDOUT (Please make sure you have the correct access rights)
CROND[13862]: (uname) CMDOUT (and the repository exists.)
CROND[13862]: pam_unix(crond:session): session closed for user uname

通过谷歌搜索以确保用户已正确设置为 github,我尝试了接受的答案 here 中显示的显式命令:

git push ssh://uname@github.com/uname/repo.git

我不是 git 专家,所以我认为这只是 github 上的一个示例 但它似乎也可以正常工作:

git push ssh://git@github.com/uname/repo.git

我还尝试了same answer above 中的~/.ssh/config 建议。即:

$ cat ~/.ssh/config
Host github-project1
User git
HostName github.com
IdentityFile ~/.ssh/id_rsa.pub

然后:

git remote add github-project1 github-project1:uname/repo.git

我尝试过的所有变体都得到了相同的结果;手动推送,脚本执行正常,但 cron 失败。

我还能检查什么?

【问题讨论】:

  • ssh -vvv git@github.com verify 应该告诉你更多。
  • @Jakuje 如果你愿意,我可以发布一个完整的日志,但是 2/3 下我得到了debug1: Authentication succeeded (publickey),它以debug1: Exit status 1 退出。我应该从脚本/cron 重新执行此操作并保存日志以进行比较吗?
  • 当你从 cron 运行它时?
  • @Jakuje 他们肯定是不同的,在谷歌搜索我认为是问题的过程中,我已经解决了这个问题。 cron 执行的脚本日志以 read_passphrase: can't open /dev/tty: No such device or address 为特征,然后失败。 This question 说这是因为 ssh-agent 不能被 cron 访问,因为它在 sesson 之外运行。谢谢你的提示;应该考虑这样做...

标签: git bash ssh cron


【解决方案1】:

git push via cron + ssh-agent(无密码)

Cron 通常无法访问您的ssh-agent,因为您的shell 中有环境变量$SSH_AUTH_SOCK,但它可能不在cron 使用的环境变量中。

【讨论】:

  • 而且我不认为我可以在我的脚本中使用SSH_AUTH_SOCK=/tmp/blahblah 设置它,对吧?
  • 你可以,但你会依赖。提供此套接字和密码短语的其他一些正在运行的会话。
猜你喜欢
  • 2014-01-18
  • 2013-01-19
  • 2012-09-10
  • 2012-02-18
  • 2012-02-23
  • 1970-01-01
  • 2019-10-29
  • 2021-06-23
  • 2015-04-16
相关资源
最近更新 更多