ShA*_*yAn 16 shell automation host rsa expect
我想自动提供"是"或忽略它并以安全的方式继续,当执行我的Expect Shell脚本时出现以下语句?
#!/usr/bin/expect
spawn ssh $user@$host
Run Code Online (Sandbox Code Playgroud)
无法建立主机'abcdef(10.566.1.98)'的真实性.RSA密钥指纹是jk:94:ba:93:0b:eb:ff:df:ea:gh:hj:23:3c:hj:9c:be.您确定要继续连接(是/否)吗?
Gre*_*Cat 31
通过使用ssh client选项StrictHostKeyChecking设置为no(默认设置为ask,导致该问题),可以避免此问题并自动接受所有传入的键:
ssh -o StrictHostKeyChecking=no "$user@$host"
Run Code Online (Sandbox Code Playgroud)
但请注意,它几乎没有任何安全性,因为您基本上接受与可能充当给定主机的每个人的联系.避免问题的唯一安全方法是将主机公钥预先分发给客户端,即以预先生成的已知主机文件的形式,可以以某种方式使用:
ssh \
-o UserKnownHostsFile=PATH_TO_YOUR_KNOWN_HOSTS_FILE \
-o StrictHostKeyChecking=yes "$user@$host"
Run Code Online (Sandbox Code Playgroud)
这样,如果检查失败,您将避免问题,并且ssh将导致非零退出状态.
这行得通,而且对 docker 构建特别方便
ssh-keyscan hostname.example.com >> $HOME/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
用于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
Run Code Online (Sandbox Code Playgroud)
参考:期待