Назад | Перейти на главную страницу

проблемы с использованием ssh из cron

Я пытаюсь автоматизировать сценарий, который выполняет команды на удаленных машинах через ssh. У меня есть настройка аутентификации с открытым ключом между машинами с помощью ssh-agent. Сценарий отлично работает при запуске из командной строки. Я подозреваю, что моя проблема в том, что cron не запускает ssh-agent из-за его минималистичной среды. Вот результат, когда я добавляю в ssh флаг -v:

debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Next authentication method: gssapi-with-mic
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/<user>/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
debug1: Trying private key: /home/<user>/.ssh/id_dsa
debug1: Next authentication method: password
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
Permission denied, please try again.
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
Permission denied, please try again.
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-with-mic,password).

Как я могу заставить это работать? Спасибо!

Я закончил тем, что запустил ssh-agent в скрипте перед вызовом ssh с помощью следующего кода. Работает как шарм.

PATH=$PATH:$HOME/bin
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new 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;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi 


export PATH
unset USERNAME
  1. Не пытайтесь использовать ssh-agent через cron: это больше проблем, чем пользы.
    Проходить -i identity_file вместо этого использовать ssh (см. ssh(1)).
  2. Убедитесь, что в вашем ключе нет кодовой фразы (поскольку cron не может ввести кодовую фразу за вас).
  3. Если вышеперечисленное не работает, трижды проверьте свои разрешения: SSH откажется принимать небезопасный файл идентификации.

Возможно, вам лучше подойдет такой инструмент, как Func.