Возникла очень странная проблема. Я создал небольшой скрипт bash, который запускает команду на удаленном хосте через ssh (используя аутентификацию с открытым ключом).
Когда я запускаю этот скрипт вручную из командной строки, он работает нормально, но при помещении в /etc/cron.hourly он завершается с Permission denied, please try again.
ошибкой.
- Я явно установил ключ в скрипте с помощью
ssh -i /root/.ssh/id_rsa user@remote "command"
; - скрипт запускается от имени пользователя root (я добавил
echo `id` > /tmp/whoami.log
для двойной проверки); и - ключ ssh не защищен паролем ...
Система является сервером Ubuntu 12.04, у меня нет большого доступа на удаленной стороне для устранения неполадок, но, как я уже сказал, работает ssh вручную или тот же скрипт bash из командной строки.
Любая идея, почему это происходит или как это исправить ??
Обновить
Оказывается, я ошибся, и ключ ssh был защищен паролем (с помощью цепочки ключей, загружающей ssh-agent), поэтому он не работал из сценария, но не при запуске из сеанса bash. Добавление . ~/.keychain/$HOSTNAME-sh
в мой сценарий решило проблему (спасибо @grawity, который указал мне правильное направление и дал исчерпывающий ответ).
SSH_AUTH_SOCK
это связано (хотя я с удовольствием попробую что-нибудь). Я обращаюсь к файлу ключа напрямую, и файл ключа не защищен паролем. Как KRB5CCNAME
показал быстрый поиск, это как-то связано с Kerberos. Опять же - не вижу связи с этой проблемой, но, может быть, я что-то здесь
-v
опцию к этой ssh
команде ...
ssh -i
команду в обоих случаях ... Я попытаюсь сбросить эти переменные в скрипте и посмотреть. Хорошее предложение добавить -v
- я тоже добавлю.
SSH_AUTH_SOCK
иKRB5CCNAME
переменных окружения.