パスワードプロンプトがスクリプトの後半を妨げないように、ssh-agentに自分のキーを追加している間にリモートHost1を介してリモートHost2からコマンドを実行するにはどうすればよいですか?
デフォルトでは、パスワードプロンプトによって中断されず、リモートHost1を介してリモートHost2からコマンドを実行しようとします。 (ローカルコンピュータはリモートHost2に直接SSH経由で接続できません。)[SSHはキー認証を有効にしています。 ]
最終的な結果は最終的にファイルをパイピングすることですが、より一般的な説明はまだ関連していると思います。
次のようにコマンドをネストした場合:
ssh -t Host1 "ssh Host2 "cat remotefile.mp4""
ブローカーにキーがないため、Host1のパスワードの入力を求められます。
このコマンドの出力をHost2からローカルシステム上の他のプロセスにパイプするには、パスワードプロンプトもパイプまたはリダイレクトされます。
そのため、関連コマンドを実行する前に、Hosts1のキーをエージェントにインポートするために次のことを考えました。
ssh -t Host1 "`eval ssh-agent -s`; ssh-add ~/.ssh/host1-id_key; ssh-add -l; ssh Host2 "cat remotefile.mp4""
しかし、正しい構文を使用してbashで上記のコマンドをリンク/ネストするのに問題があります。
私は得る:
syntax error near unexpected token `;;'
私はこれがバックティックコマンドの代替構文に関連していると思い、それが何を意味するのか完全に理解していないことを認めます。
同じ結果で、次のバリエーションを試しました。
ssh -t Host1 "`eval ssh-agent -s` && ssh-add ~/.ssh/host1-id_key && ssh-add -l; ssh Host2 "cat remotefile.mp4""
ssh -t Host1 << HERE
`eval ssh-agent -s`;
ssh-add ~/.ssh/host1-id_key;
ssh-add -l;
ssh Host2 "cat remotefile.mp4"
HERE
リモートシェルで実行される複数のコマンド、特にeval ssh-agentコマンドを正常に接続/ネストする方法。
答え1
を使用してプロキシ転送を有効にできます-A
。これにより、ssh-agent
リモートホストからローカルホストに接続できます。
ssh -A Host1 ssh Host2 cat remotefile.mp4
もしあなたならいつもプロキシをに渡すには、Host1
次のものを追加するだけで、~/.ssh/config
指定する必要はありません-A
。
Host Host1
ForwardAgent yes
プロキシ配信のセキュリティリスクに注意してください。ssh(1)
マニュアルページから:
プロキシ転送は慎重に有効にする必要があります。リモートホスト(エージェントのUNIXドメインソケット用)でファイル権限をバイパスできるユーザーは、転送された接続を介してローカルエージェントにアクセスできます。攻撃者はプロキシからキーマテリアルを取得できませんが、プロキシにロードされたIDを使用して認証できるキーに対してアクションを実行する可能性があります。より安全な方法は、ジャンプホスト(-Jを参照)を使用することです。
-J
代替案は、マニュアルページの説明に従ってjumphost()オプションを使用することです。柔軟性は低下しますが、最初のホストからSSHを介して2番目のホストに接続するだけでうまくいきます。これを使用するには、サンプルコマンドを次のように変更します。
ssh -J Host1 Host2 cat remotefile.mp4
これはTCP転送()を介してリモートホストに接続を-J Host1
指示します。ssh
Host2
Host1
常にジャンプホストとして接続するには、次のようにしますHost2
。Host1
~/.ssh/config
Host Host2
ProxyJump Host1
その後、ssh Host2 cat remotefile.mp4
トンネルssh
を介して自動的に接続が確立されますHost1
。