Я изо всех сил пытался crontab автоматизировать процесс git push с помощью ssh, и было сложно установить ключ с помощью агента ssh. Начиная с базового скрипта для тестирования агента:
# set paths (all examples)
source /etc/profile
export PATH=$PATH:/Users/myusername/.ssh
eval "$(ssh-agent)" > ssh_agent.txt
/usr/bin/ssh-add -l >> ssh_agent.txt
.. который выводит следующее:
Agent pid 16062
The agent has no identities.
Таким образом, агент активен. Теперь добавьте ключ и проверьте, что он зарегистрирован у агента. В iTerm2 вручную это работает нормально:
/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
2048 [key fingerprint] /Users/myusername/.ssh/id_rsa (RSA)
Я пытаюсь повторить это внутри задания crontab, используя этот скрипт:
/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
/usr/bin/ssh-add -l >> ssh_agent.txt
.. который сообщает The agent has no identities
к файлу, а через "You have mail in /var/mail/myusername"
:
[email metadata]
Enter passphrase for /Users/myusername/.ssh/id_rsa:
Таким образом, ключ пытается загрузить, но ловит в приглашении пароля. Здесь я хочу использовать expect
, чтобы придать ему ключевую фразу, как описано в этом unix.stackexchange ответ (который выглядит , как он должен работать в OSX):
#!/usr/bin/expect -f
/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
expect "Enter passphrase for /Users/myusername/.ssh/id_rsa:"
send "mypassphrase\n";
interact
Ответ об ошибке почты:
Enter passphrase for /Users/myusername/.ssh/id_rsa:
couldn't read file "Enter passphrase for /Users/myusername/.ssh/id_rsa:": no such file or directory
/Users/myusername/test/crontest.sh: line 17: send: command not found
/Users/myusername/test/crontest.sh: line 18: interact: command not found
Поэтому я попробовал альтернативную конфигурацию на основе этого SO ответа:
#!/usr/bin/expect -f
expect -c "
/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
expect \"Enter passphrase for /Users/myusername/.ssh/id_rsa: \"
send \"mypassphrase\n\";
interact
"
.. и получите следующий почтовый отчет об ошибке:
invalid command name "/usr/bin/ssh-add"
while executing
"/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa"
Could not open a connection to your authentication agent.
Я не понимаю, проблема здесь - агент ssh работает, и ключ кажется доступным, так что же это за проблема с соединением? Я пробовал другие конфигурации expect
без успеха. Очень благодарен за помощь.