С ПК1 я SSH в СЕРВЕР1 где у меня есть сценарий bash, который будет использовать SSH и авторизоваться для СЕРВЕР2 используя SSH-ключ, защищенный паролем.
Все работает нормально, когда я вручную выполняю свой скрипт, используя ssh-agent, чтобы загрузить свой защищенный паролем ключ в память и перенаправить его в СЕРВЕР2 для авт.
Но использование crontab на SERVER1 обычно дает сбой; как я могу заставить работать следующую команду, используя SSH-ключ, защищенный паролем?
SERVER1$ ssh -i ~/.ssh/somekey.pem SERVER2
Вы не можете. Идея защиты ключей паролем состоит в том, что каждый раз, когда ключ читается, пароль необходимо вводить. При автоматическом запуске команды нет ничего, что могло бы предоставить необходимый пароль, поэтому ssh
не получит доступа к закрытому ключу.
Это можно обойти, используя какую-то автоматизацию, которая предоставляет пароль из кода (используя expect
например), но в этом случае вам придется где-то сохранить пароль, чтобы передать его в ssh
. Таким образом, вы защищаете ключ паролем, но сразу же предоставляете пароль, так в чем смысл?
Думаю, для автоматизированных задач лучше иметь ключ без пароля.