yes で ssh が動作しない

yes で ssh が動作しない

最近、サーバーの指紋をユーザーの指紋に追加するという特殊なケースを解決しなければなりませんでした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 を実行するプログラムを自動化できます。

関連情報