ssh ProxyCommandは実際にはどのように機能しますか?


8

私はsshのProxyCommand機能の使用に慣れており、それを使用して複数の要塞ホストをホップして、最終的なホストに効率的に到達できます。しかし、私はそれが実際にバックエンドでどのように機能するのか理解できないようです。

たとえば 次の設定ファイルがあります。

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh user@bastion.com -W %h:%p"

ホストfinalへの接続では、への接続を行う前にProxyCommandが実行されることを理解していますfinal.com。しかし、それでも接続の順序を理解できていないようです。

そして、オプション-W %h:%pは何をしますか?これはnetcat機能であり、に似ていることを理解していnc %h %pます。

私の理解がここにある限り、操作のシーケンスです。私が間違っているかどうか親切に私に知らせてください。私の例では、上で指定した構成ファイルを使用します。

  1. ユーザーが入力します ssh final
  2. bastion.comへのssh接続が作成されました。
  3. netcatトンネルは、bastion.comからfinal.comのポート22に作成されます。netcatのstdinは、bastion.comへの接続で取得されたシェルに接続されます。
  4. これで、システムからfinal.comに接続できました。この接続の前半は、システムからbastion.comへのssh接続です。この接続の後半は、bastion.comからfinal.comへのnetcatトンネルです。
  5. ssh finalのコマンドは、プロキシとして上記の接続を取り、この既存の接続を介してデータをトンネルします。

さらに、この手法がSSHスタッキングとしても知られているかどうかも知りたいのですが?

追加された改行

回答:


8

3)bastion.comからfinal.comのポート22へのnetcatトンネルが作成されます。

false、netcatはありません。

1)ユーザーssh finalがlocalhostに入力します。これにより、親sshプロセスが起動します
2)親sshは、I / Oをパイプにリダイレクトして
子sshを作成します3)子sshは、bastion.comへの接続を作成します。
4)sshdbastion.com のプロセスにより、final.com:22へのtcp接続が作成
されます。5
)localhostとbastion.comの間の既存のssh接続にsshチャネルが追加されます。それをパイプから読み取り、sshチャネル経由でbastion.comのsshdに送信します。sshdはそれを読み取り、final.comに接続されたソケットに書き込みます。同様に、データはfinal.comからlocalhostに送信されます


ご回答有難うございます。この手法はsshスタッキングとも呼ばれますか、それとも名前がありませんか?
うずまきナルト2013年

2
参考にしていただけませんか?例えばマニュアル。仕様..
qweruiop 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.