Итак, у меня была похожая проблема. Я пришел сюда и увидел разные ответы, но, поэкспериментировав, я понял, как это работает с sshkeys с парольной фразой, ssh-agent и cron.
Прежде всего, моя установка ssh использует следующий скрипт в моем скрипте bash init.
# 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, вы можете настроить работу как обычного пользователя различными способами.
Если вы запустите crontab -e как пользователь root, он установит пользователя cron. Если вы запустите crontab -u davis -e, он добавит задание cron в качестве имени пользователя davis. Аналогично, если вы запускаете от имени пользователя davis и выполняете crontab -e, это создаст задание cron, которое будет запускаться как userrid davis. Это можно проверить с помощью следующей записи:
30 * * * * /usr/bin/whoami
Это будет отправлять результат whoami каждые 30 минут пользователю 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.
Решение состоит в том, чтобы установить скрипт env для ssh-agent выше. Вот результирующая запись cron:
55 10 * * * . /home/davis/.ssh/environment; /home/davis/bin/domythingwhichusesgit.sh
Это запустит скрипт в 10:55. Обратите внимание на ведущие. в сценарии. В нем говорится, что этот сценарий следует запускать в моей среде, аналогичной сценарию .bash init.