
Я использую инструмент, который использует 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 о неизвестных или измененных ключах хоста.
Вы можете ограничить эти параметры набором хостов, указав соответствующий шаблон хоста.