これはオレンジ色のコンピューターのコマンドです。
ssh -N -R:<chosen-port>:10.0.0.101:<web-app-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>
(オレンジからのログアウトで生き残る方法-これは別の問題です。これを参照してください;またはtmux
/ screen
、disown
またはnohup
カスタムスクリプトで。)
上記のコマンドは、青色の SSHサーバー<chosen-port>
が、ループバックインターフェイスで選択した(TCP)でリッスンするようにします。着信接続はオレンジにトンネリングされ、そこから送信されます10.0.0.101:<web-app-port>
(つまり、赤)。これにより、青のコマンドもシェルも実行せずにトンネルが作成され-N
ます(オプションのおかげ)。
他の(ループバックではない)インターフェースで青をリッスンさせる方法がありますが、セキュリティのため推奨されません。このオプションはさえで無効にすることができる青(で説明しman ssh
、-R
オプション)。
緑のホームマシンから青のループバックインターフェイスに到達するには、別のトンネルを使用します。オン緑:
ssh -N -L:<chosen-port-2>:127.0.0.1:<chosen-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>
これで、アドレスを使用して緑から赤に到達できるはずです。
127.0.0.1:<chosen-port-2>
<chosen-port>
そして<chosen-port-2>
、同じ番号であってもなくてもよい、それは本当に問題ではありません。重要なのは、高いポート(1024から65535まで)を選択することです。
-L
と-R
トンネルの違い:
-L
ローカル側、つまり呼び出した場所でリッスンしますssh
。
-R
リモート側、つまりどこでリッスンしますssh
。
これを知っていれば、私たちがやったことをトレースできるはずです。この方法で作業する方が論理的に思えたので、緑に向かってトンネルを作成したことに注意してください。接続は緑色から行われるため、この方向でルート全体をトレースしてみましょう。次のとおりです。
- 緑色の SSHクライアント
127.0.0.1:<chosen-port-2>
は、2番目のトンネルのためにリッスンします。
- パケットを青色の SSHサーバーに転送し、
127.0.0.1:<chosen-port>
そこに送信します。青の観点から、これらはSSHサーバーによって生成されるローカルパケットです。
- 最初のトンネルのため、同じSSHサーバーはそのポートでリッスンします。サーバーはパケットを取得し、オレンジに転送します。
- オレンジの SSHクライアントは、パケットを赤に送信します。赤のパケットからある視点オレンジ、それはについて何も知らない青や緑を。