我将这个脚本放在一起,每天更新一个分叉的 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 不执行任何操作,您需要使用以下命令合并运行结果命令替换 with:
eval `ssh-agent`
or
eval $(ssh-agent)
这会导致脚本设置所需的环境变量。然而,ssh-agent
仍然不会有任何钥匙,除非你ssh-add
他们。如果您的密钥没有密码,那么ssh-add
可以简单地从脚本运行。
如果您的私钥确实有密码,您可能希望将此脚本作为守护程序而不是 cron 作业运行。这将允许您连接到代理并添加您的私钥。
该脚本从命令行运行的真正原因是您的桌面环境可能正在运行ssh-agent
它会安排将所需的环境变量传播到所有终端窗口。 (要么让它们成为子级并继承变量,要么让你的 shell 获取必要的命令。)我猜你正在运行ssh-add
在您正常工作流程的某个时刻?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)