bash - 从通过 cron 作业运行的 bash 脚本访问 SSH key

标签 bash scripting ssh cron github

我将这个脚本放在一起,每天更新一个包含分支 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 仍然没有任何 key ,除非您ssh-add 它们。如果您的 key 没有密码,则可以简单地从脚本运行 ssh-add

如果您的私钥确实有密码,您可能希望将此脚本作为守护程序而不是 cron 作业运行。这将允许您连接到代理并添加您的私钥。

脚本从命令行运行的真正原因是您的桌面环境可能正在运行 ssh-agent 并且它安排将所需的环境变量传播到您的所有终端窗口。 (通过让它们成为 child 并继承变量,或者让您的 shell 获取必要的命令。)我猜您在正常工作流程的某个时刻正在运行 ssh-add

关于bash - 从通过 cron 作业运行的 bash 脚本访问 SSH key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1671413/

相关文章:

linux - 使用 shell 脚本反转旧补丁后应用新补丁

linux - 使用shell脚本修改/etc/hosts文件

linux - 显示未登录的用户进程 linux bash 脚本

python - 在 Android 应用程序中调用 Lua/Python 脚本

powershell - 合并多个 CSV 文件

linux - 关于 sed 模式匹配的建议

linux - 通过云连接的 SSH,就像 RealVNC Connect 但用于 SSH

ubuntu - jenkins 使用 sudo 时出现身份验证错误

ssh - 如何在 TCL Expect 中的多个程序之间共享生成的 SSH 进程?

bash - "' C :\Program ' is not recognized as an internal or external command" error when using Azure CLI