
最近我必須解決一個邊緣案例,我必須為使用者添加多個伺服器指紋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 的程式。