SSH из шеллскрипта без пароля

Я создал пару ключей для своего школьного проекта, работающего на Raspberry Pi (под управлением Raspbian). Когда я бегу

ssh -f -N -R 54321:localhost:22 mylogin@host

в командной строке у меня нет проблем. Туннель настроен без ввода пароля. Однако, когда я пытаюсь запустить тот же самый код из сценария оболочки, он запрашивает мой пароль. Кто-нибудь знает мою ошибку?


person Michiel Ariens    schedule 05.11.2013    source источник
comment
Вы можете поделиться сценарием или как вы запускаете сценарий?   -  person neo    schedule 05.11.2013
comment
Взгляните на stackoverflow.com/questions/15657821/, надеюсь, это решит вашу проблему.   -  person neo    schedule 05.11.2013


Ответы (1)


В большинстве дистрибутивов Linux экземпляр ssh-agent запускается при входе в систему. Это фоновый процесс, который хранит расшифрованные копии ваших SSH-ключей; команда ssh попытается пройти через ssh-agent, чтобы получить доступ к ключам для аутентификации с открытым ключом. Суть ssh-agent заключается в том, что вам нужно будет ввести пароль для ключа SSH только один раз во время сеанса входа в систему. (В некоторых дистрибутивах вам даже не нужно вводить это — ваши ключи автоматически расшифровываются при входе в систему.)

Я предполагаю, что вы пытаетесь запустить свой скрипт из cron или из какого-то другого серверного процесса (например, веб-сервера или CGI-скрипта)? Если это так, у него не будут настроены необходимые переменные среды для команды ssh для общения с ssh-agent, поэтому он будет запрашивать пароль (и, следовательно, не будет работать, если он не запускается в терминале).

Вы можете обойти это, сохранив незашифрованную копию своего SSH-ключа (поэтому вам не понадобится ssh-agent для его расшифровки), но, поскольку это важный фактор безопасности, нет-нет, обычно это делается только для ключей SSH, которые разрешают доступ к заблокированным -down, учетные записи с минимальными привилегиями.

person pobrelkey    schedule 05.11.2013
comment
Ключи хранятся в расшифрованном виде, и безопасность не является проблемой, так как это происходит в классе без внешнего доступа в Интернет. Я запускаю скрипт из rc.local, вызывая скрипт python для запуска команд. Когда скрипт вызывается автоматически, я получаю ошибку проверки ключа хоста. Когда я вручную запускаю скрипт через секунду, все в порядке. Я нашел обходной путь, запустив xsession и запустив фоновое приложение, но, на мой взгляд, это не очень хорошее решение. - person Michiel Ariens; 16.11.2013