所以我遇到了类似的问题。我来到这里并看到了各种答案,但是通过一些实验,我可以使用带有密码短语、ssh-agent 和 cron 的 sshkeys 来使用它。
首先,我的 ssh 设置在我的 bash 初始化脚本中使用了以下脚本。
# JFD Added this for ssh
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
当我登录时,我输入我的密码一次,然后从那时起它将使用 ssh-agent 自动对我进行身份验证。
ssh-agent 详细信息保存在 .ssh/environment 中。这是该脚本的外观:
SSH_AUTH_SOCK=/tmp/ssh-v3Tbd2Hjw3n9/agent.2089; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2091; export SSH_AGENT_PID;
#echo Agent pid 2091;
关于 cron,您可以通过各种方式将作业设置为普通用户。如果您以 root 用户身份运行 crontab -e,它将设置一个 root 用户 cron。如果您以 crontab -u davis -e 运行,它将添加一个 cron 作业作为用户 ID davis。同样,如果您以用户 davis 运行并执行 crontab -e,它将创建一个以用户 davis 运行的 cron 作业。这可以通过以下条目进行验证:
30 * * * * /usr/bin/whoami
这将每 30 分钟将 whoami 的结果邮寄给用户 davis。(我以用户 davis 的身份执行了 crontabe -e。)
如果您尝试查看哪些键用作用户 davis,请执行以下操作:
36 * * * * /usr/bin/ssh-add -l
它会失败,通过邮件发送的日志会说
To: davis@xxxx.net
Subject: Cron <davis@hostyyy> /usr/bin/ssh-add -l
Could not open a connection to your authentication agent.
解决方案是为上面的 ssh-agent 获取 env 脚本。这是生成的 cron 条目:
55 10 * * * . /home/davis/.ssh/environment; /home/davis/bin/domythingwhichusesgit.sh
这将在 10:55 运行脚本。注意领先。在脚本中。它说要在我的环境中运行这个脚本,类似于 .bash 初始化脚本中的内容。