我已经将这个脚本放在一起,每天更新一个分叉的Github存储库文件夹.如果我从提示符调用它,它运行正常,但我可以'弄清楚如何在作为cron作业运行时可靠地利用我的id_rsa.这eval 'ssh-agent'
是尝试做到这一点,但它没有看到任何积极的影响.
#!/bin/sh LOGPATH=log.txt eval 'ssh-agent' cd /path/to/update/folder echo "-------START UPDATE-------">$LOGPATH echo "Updating repos:">>$LOGPATH date "+%F %T">>$LOGPATH COUNT=1 find . -maxdepth 1 -type d | while read dir; do cd "$dir" LEN=$"${#dir}" if [ $LEN != "1" ] then echo "*********">>$LOGPATH echo "$COUNT. " ${dir:2}>>$LOGPATH /usr/local/bin/git pull upstream master>>$LOGPATH 2>> $LOGPATH /usr/local/bin/git push origin master>>$LOGPATH 2>> $LOGPATH let COUNT=COUNT+1 fi cd "$OLDPWD" done echo "-------END UPDATE-------">>$LOGPATH exit 0
对于整个过程来说,这可能是一种非常低效的方式,但是它有效并且我从未见过它.如果我可以使用我的信用卡,我会很高兴.
我相信你使用了错误的报价.简单引用ssh-agent不做任何事情,你需要通过使用命令替换来合并运行它的结果:
eval `ssh-agent`
要么
eval $(ssh-agent)
这会导致脚本设置所需的环境变量.但是,ssh-agent
除非ssh-add
他们,否则仍然没有任何密钥.如果您的密钥没有密码,那么ssh-add
只需从脚本运行即可.
如果您的私钥确实有密码短语,您可能希望将此脚本作为守护程序而不是cron作业运行.这将允许您连接到代理并添加您的私钥.
脚本在命令行中运行的真正原因是您的桌面环境可能正在运行,ssh-agent
并且它会安排将所需的环境变量传播到所有终端窗口.(要么让他们成为孩子并继承变量,要么让你的shell获得必要的命令.)我猜你ssh-add
在正常的工作流程中正在运行?