Я использую инструмент, который использует SSH для подключения к удаленному хосту. К сожалению, этот инструмент не принимает вводимые пользователем данные, и когда ключ удаленного хоста неизвестен, вызов зависает навсегда. Есть ли опция или набор опций, которые делают невозможным вызов ssh, когда ключ удаленного хоста неизвестен?
4 ответа
В качестве обходного пути вы можете проверить, доверяет ли хост:
$ 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
Вы можете использовать -oBatchMode=yes
для сбоя, когда потребуется взаимодействие с пользователем (например, запрос пароля, проверка ключа удаленного хоста и т.д.)
Используйте -o StrictHostKeyChecking=yes
для вызова ssh
:
Если для этого флага установлено значение yes, ssh(1) никогда не будет автоматически добавлять ключи хоста в файл ~/.ssh/known_hosts и отказывается подключаться к хостам, чей ключ хоста был изменен.
По умолчанию ask
и вот почему у вас есть проблема:
Если для этого флага задано значение ask (по умолчанию), новые ключи хоста будут добавлены к известным хост-файлам пользователя только после того, как пользователь подтвердит, что это именно то, что он действительно хочет сделать, и ssh откажется подключаться к хостам, чей ключ хоста изменился
Вы можете добавить параметры по умолчанию в ~/.ssh/config, такие как:
Host *
StrictHostKeyChecking no
Это отключает ssh, жалующийся на неизвестные или измененные ключи хоста.
Эти параметры можно ограничить набором хостов, указав соответствующий шаблон хоста.