SSH リモートポート転送

Linux

ローカルのポート転送があればリモートもあります。

構成

あまり具体的な利用局面が思いつきませんが、簡単な構成をとってみます。

Ssh pfr 02kousei

3台のPCがあり、purpleではSSHサーバが動作しています。また、cyanではWebサーバが動作しています。

purpleがcyanへアクセスしたいのですが、cyanは外部との通信ができないとします。そこで、greenがpurpleとSSHの通信を行なって、そのSSHを利用してpurpleはcyanと通信することとします。

Ssh pfr 03network

SSH リモート ポート転送

greenからpurpleにSSH接続します。

green # ssh -f -N -R 12345:192.168.103.5:80 192.168.102.3

Ssh pfr 04ssh

greenのネットワークの状態は次のようになっています。

green # ss -4atn
State       Recv-Q      Send-Q             Local Address:Port               Peer Address:Port
ESTAB       0           0                  192.168.102.4:50892             192.168.102.3:22

greenとpurpleがsshで接続していることがわかります。

一方、purpleのネットワークの状態は次のようになっています。

purple # ss -4atn
State       Recv-Q      Send-Q             Local Address:Port               Peer Address:Port
LISTEN      0           128                    127.0.0.1:12345                   0.0.0.0:*
ESTAB       0           0                  192.168.102.3:22                192.168.102.4:50892

greenとSSHで接続していることと、ポート12345がLISTEN状態であることがわかります。

ポート転送

purpleが自身のポート12345にアクセスしてみます。

purple # curl localhost:12345
<head>
    <title>Cyan</title>
</head>
<body>
    <h1>Cyan</h1>
</body>

Ssh pfr 05pf無事にcyanのWebサーバにアクセスできました。

リモートポート転送の終了

greenではsshがバックグラウンドで動作しています。そのsshを終了させるために、psコマンドでプロセス番号を調べてからkillコマンドで当該プロセスを終了させます。

green # ps -ef | grep ssh
root       92806       1  0 11:22 ?        00:00:00 ssh -f -N -R 12345:192.168.103.5:80 192.168.102.
green # kill 92806

コメント

タイトルとURLをコピーしました