ssh 无法使用 yes

ssh 无法使用 yes

最近,我不得不解决一个边缘案例,我必须向用户添加一些服务器指纹known_hosts(授权是通过密钥对执行的)。我认为最简单的解决方案就是调用

yes yes | ssh *login@host*

。令人惊讶的是(至少对我来说),这不起作用:ssh仍然询问是否添加指纹,并需要手动输入。

我的问题是:为什么会这样?这种行为背后的机制是什么

答案1

对于此提示,ssh不使用标准输入&标准输出流 – 避免提示与远程命令的输入/输出混淆。(想象一下运行ssh host cat something.tar | tar x,突然tar x抱怨其输入中有垃圾。)

相反,ssh打开特殊设备/dev/tty,该设备始终指向其“控制终端”,在那里写入提示,并从中读取答案。


对于您的问题,OpenSSH 附带了ssh-keyscan一个可以同时获取多个服务器公钥的工具。

ssh-keyscan host1 host2 host3 >> ~/.ssh/known_hosts

(我不确定您是否意味着known_hosts,或者实际上authorized_keys在这里需要。)


对于一般情况,该expect实用程序可用于自动化通常通过 tty 执行 I/O 的程序。

相关内容