Expect Shellスクリプトの実行中に次のステートメントが表示された場合、自動的に「Yes」を提供するか、無視して安全な方法で続行したいですか?.
#!/usr/bin/expect
spawn ssh $user@$Host
ホスト 'abcdef(10.566.1.98)'の信頼性を確立できません。 RSAキーフィンガープリントはjk:94:ba:93:0b:eb:ff:df:ea:gh:hj:23:3c:hj:9c:beです。接続を続行してもよろしいですか(はい/いいえ)?
このシナリオではexp_continue
を使用してください。
#!/usr/bin/expect
set Prompt "#|>|\\\$"
spawn ssh dinesh@myhost
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
参照: 期待
SshクライアントオプションStrictHostKeyChecking
をno
に設定することで、この質問を回避し、すべての着信キーを自動的に受け入れることができます(デフォルトの設定はask
であり、そのため、この質問が発生します)。
ssh -o StrictHostKeyChecking=no "$user@$Host"
ただし、基本的には特定のホストとして機能する可能性のあるすべてのユーザーとの接続を受け入れるので、ほとんど安全ではないことに注意してください。質問を回避する唯一の安全な方法は、ホストの公開鍵をクライアントに事前に配布することです。つまり、事前に生成された既知のホストファイルの形式で、次のような方法で使用できます。
ssh \
-o UserKnownHostsFile=PATH_TO_YOUR_KNOWN_HOSTS_FILE \
-o StrictHostKeyChecking=yes "$user@$Host"
これにより、チェックが失敗した場合の質問を回避でき、sshはゼロ以外の終了ステータスになります。
これは機能し、Dockerビルドに特に便利です
ssh-keyscan hostname.example.com >> $HOME/.ssh/known_hosts