Как игнорировать или передавать "Да", когда подлинность хоста не может быть установлена в Expect Shell script во время автоматизации
Я хочу автоматически указать "Да" или "Игнорировать" и действовать безопасным способом, когда приведенный ниже оператор появляется во время выполнения моей оболочки Expect script?.
#!/usr/bin/expect
spawn ssh [email protected]$host
Невозможно установить подлинность хоста 'abcdef (10.566.1.98)'. Отпечаток ключа RSA: j: 94: ba: 93: 0b: eb: ff: df: ea: gh: hj: 23: 3c: hj: 9c: be. Вы действительно хотите продолжить подключение (да/нет)?
Ответы
Ответ 1
Используйте exp_continue
для этого сценария.
#!/usr/bin/expect
set prompt "#|>|\\\$"
spawn ssh [email protected]
expect {
#If 'expect' sees '(yes/no )', then it will send 'yes'
#and continue the 'expect' loop
"(yes/no)" { send "yes\r";exp_continue}
#If 'password' seen first, then proceed as such.
"password"
}
send "root\r"
expect -re $prompt
Ссылка: Expect
Ответ 2
Можно избежать этого вопроса и принять все входящие ключи automaticatilly, используя опцию клиента ssh StrictHostKeyChecking
, установленную в no
(настройка по умолчанию ask
, что приводит к такому вопросу):
ssh -o StrictHostKeyChecking=no "[email protected]$host"
Однако обратите внимание, что это вряд ли будет безопасным, поскольку вы в основном соглашаетесь со всеми, кто может выступать в роли данного хоста. Единственный безопасный способ избежать вопроса состоит в том, чтобы предварительно распространять общедоступные ключи хоста клиентам, то есть в форме предварительно созданного файла известных хостов, который может быть использован таким образом:
ssh \
-o UserKnownHostsFile=PATH_TO_YOUR_KNOWN_HOSTS_FILE \
-o StrictHostKeyChecking=yes "[email protected]$host"
Таким образом вы избежите вопроса, если проверка завершится неудачно, и ssh приведет к ненулевому состоянию выхода.
Ответ 3
Это работает, и это особенно удобно для сборок докеров
ssh-keyscan hostname.example.com >> $HOME/.ssh/known_hosts