我无法使用回显“是”自动化bash脚本中的输入命令

时间:2014-05-31 12:40:26

标签: bash

为什么这不起作用?我试图在bash脚本中自动执行此操作,但仍然提示我是... ....

echo "yes" | ssh -T git@github.com 
The authenticity of host
   'github.com (192.30.252.129)' can't be established. RSA key
   fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are
   you sure you want to continue connecting (yes/no)?

1 个答案:

答案 0 :(得分:2)

@Barmar值得称赞关键指针:禁用选项StrictHostKeyChecking以完全取消提示:

ssh -o StrictHostKeyChecking=no -T git@github.com

但请注意:

  • 出于安全原因,不建议禁止或自动确认真实性提示
  • 在给定的计算机上,一旦您第一次连接到远程主机并确认了提示,就不会再次提示您,因为主机的指纹会自动保存到配置文件~/.ssh/known_hosts

因此,如果可行,更好的选择是将所有潜在目标主机的指纹保存到前面~/.ssh/known_hosts/etc/ssh/ssh_known_hosts,正如@chepner在评论中建议的那样。

但请注意,如果远程主机[的硬盘驱动器]被替换(例如,在硬件故障后)而未传输其旧的自身身份指纹文件,则会再次出现身份验证警告提示由于生成了新的指纹 - 除非新的指纹在事先访问机器时再次保存。


正如@Ian Roberts所指出的那样,通过stdin管道响应的原因无效,可能是ssh直接从终端读取响应。

正如@konsolebox指出的那样,如果您确实需要自动与ssh进行互动,expect(请参阅man expect)是适合此工作的工具,但由于此通常涉及自动输入密码,它带有安全警告。