2 つの SSH ホップでコマンドを実行する

2 つの SSH ホップでコマンドを実行する

次のようなAWSのベストプラクティスBastion Machine SSH経由でアクセスできるインフラストラクチャを設定しました。

localhost → bastion → target server

ターゲットサーバーに接続するには、localhostと要塞ボックスにキーファイルがあり、SSHを使用して次のようにジャンプします。

localhost > ssh -i key.pem bastion
bastion > ssh -i key.pem target

のように見えるこの問題関連。 localhostから直接ターゲットサーバーにコマンドを実行するには?

答え1

SSH構成でProxyCommandを使用する必要があります。まだ設定していない場合は、~/.ssh/config次をご覧ください。ここ

したがって、次のことをしたいと思います。

  1. SSH 構成で要塞を転送プロキシとして配置します。

  2. ProxyCommandを使用して、要塞からターゲットサーバーへの接続をプロキシします。

簡単な例は次のとおりです。

Host <bastion>
    ForwardAgent yes

Host <target_server>
        User <user>
        Hostname <Ip/Hostname>
        ProxyCommand ssh -q -W %h:%p <user>@<bastion> nc 2> /dev/null
        IdentityFile ~/.ssh/id_rsa

答え2

コマンドラインから次のコマンドを使用して、ターゲットtopシステムで実行するなどのリモートコマンドを実行します。

$ ssh -qt bastion "ssh -qt target \"top\"\"

これは特定のユーザーと一緒に使用または実行するsudoこともできます。sudo su - user

$ ssh -qt bastion "ssh -qt target \"sudo su - user1 -c 'ls -l'\""

ssh例のオプションが実行する操作は次のとおりです。

  • ssh -q=静かで、干渉を最小限に抑えるためにサーバーのバナーを抑制します。
  • ssh -t=ターミナル、疑似ターミナルを強制的に割り当て、ターミナル指向コマンド(およびtop)をsudo使用して対話型セッションを許可します。

関連情報