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 的程式。

相關內容