Ошибка, если ключ удаленного хоста SSH неизвестен

Ошибка, если ключ удаленного хоста SSH неизвестен

Я использую инструмент, который использует ssh для подключения к удаленному хосту. К сожалению, этот инструмент не принимает пользовательский ввод, и когда ключ удаленного хоста неизвестен, вызов зависает навсегда. Есть ли опция или набор опций, которые делают вызов ssh неудачным, когда ключ удаленного хоста неизвестен?

решение1

Используйте -o StrictHostKeyChecking=yesдля sshвызова:

Если этот флаг установлен на «yes», ssh(1) никогда не будет автоматически добавлять ключи хоста в файл ~/.ssh/known_hosts и откажется подключаться к хостам, ключ хоста которых изменился.

Значение по умолчанию — askвот почему у вас возникла проблема:

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

решение2

В качестве обходного пути вы можете самостоятельно проверить, является ли хост доверенным:

$ ssh-keygen -H -F host.example.com
# Host host.example.com found: line 205 type RSA
...

Обратите внимание, что ssh-keygen в любом случае завершается с 0, поэтому вам нужно проверить вывод:

ssh-keygen -H -F host.example.com |
   grep -q found: || echo "host is not trusted" && exit 2

решение3

Вы можете использовать его -oBatchMode=yesдля отказа в случаях, когда требуется взаимодействие с пользователем (например, запрос пароля, проверка ключа удаленного хоста и т. д.).

решение4

Вы можете добавить параметры по умолчанию в ~/.ssh/config, например:

Host *
    StrictHostKeyChecking no

Это отключает сообщения ssh о неизвестных или измененных ключах хоста.

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

Связанный контент