自动化 git-pull,使用 keychain

自动化 git-pull,使用 keychain

我想创建一个 cronjob,每分钟自动运行一次 git-pull。问题是我的 repo 是私有的,我必须在我的系统 (Ubuntu Server 12.04) 上创建密钥。我安装了 keychain,ssh-agent 现在阻止系统每次询问我密码。问题是它在 crontab 中不起作用!为什么它在 shell 中有效,而在 crontab 中却被要求输入密码?

答案1

在您的脚本中,您是否先执行$(eval ssh-agent),然后执行ssh-add <private_key>

为了验证,请ssh-add -l在执行 git pull 之前先执行一个操作,以确保您的密钥位于应在的位置。

[编辑] 尝试制作如下脚本:

#!/bin/bash
set -e 
cd /var/www/GITREPO 
eval $(ssh-agent) 
ssh-add /home/multiformeingegno/.ssh/id_rsa
ssh-add -l
git pull

答案2

比 cronjob 更好,我建议使用 hooks/post-receive 脚本:

首先,在我的 .bashrc 中:

[ -x /usr/bin/keychain ] && /usr/bin/keychain ~/.ssh/id_rsa || echo "Missing keychain pkg..."
[ -f ~/.keychain/$(hostname)-sh ] && source ~/.keychain/$(hostname)-sh

正如您所知,它在首次登录时要求输入密码(必要),以便钥匙串 ss-agent 进行注册。

然后,在裸存储库中:/path/to/bare/repo.git/hooks/post-receive:

#!/bin/bash
ssh <host> sh << EOF #I launch sh here for less verbosity on terminal login
. ~/.keychain/\$(hostname)-sh
cd /path/to/cloned/repo.git
unset GIT_DIR
git pull
EOF

不要忘记:

chmod +x /path/to/bare/repo.git/hooks/post-receive

这样,从我的裸存储库的开发克隆中,生产存储库就会自动更新。

相关内容