2

Я пишу bash-скрипт, который должен запускать serf agent(http://www.serfdom.io/intro/index.html) на удаленной машине через ssh. Я настроил ключи RSA, используя ...

ssh-key-gen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub <remote-host>

И я могу ssh в удаленную машину без пароля от терминала. Это вызов, который я делаю в сценарии

ssh <user>@<hostname> "serf agent -node database -event-handler user:database_install=~/serf_install_db_handler.sh"

Но когда скрипт выполняется, я должен использовать эту команду, чтобы запустить его без запроса пароля ...

ssh -i ~/.ssh/id_rsa.pub <remote-host> <command>

Почему я должен делать это в скрипте, когда мне не нужно делать это в терминале?

2 ответа2

2

ssh -i выбирает файл, из которого читается идентификация (закрытый ключ) или аутентификация с открытым ключом.

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

Добавьте в ~/.ssh/config (замените server.example.com на имя хоста или IP вашего сервера):

Host server.example.com
    User username
    Hostname server.example.com
    PreferredAuthentications publickey,password
    IdentityFile ~/.ssh/id_rsa.pub

Этот конфиг заставит ваше соединение всегда пытаться использовать ключ id_rsa.pub, а затем откат к паролю, если ключ по какой-то причине не будет доступен.

Так что теперь вы сможете использовать ssh <user>@<host> <command> с ним автоматически, используя ваш личный ключ для аутентификации.

0

Вы пробовали ssh-add при запуске системы?

ssh-add - добавляет идентификаторы закрытого ключа в агент аутентификации

Вы можете использовать эту команду и по умолчанию при подключении ssh будет пытаться использовать ваши закрытые ключи и только после этого - пароль.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .