次の状況を考えてみましょう。
私の家には、ルーター(インターネットに接続されている)、サーバー(S)、ホスト(M)があります。 Sはインターネット(固定IP付き)を介してアクセスでき、年中無休のオンラインですが、Mはそうではありません。
場合によっては、外部インターネットからアクセスできるいくつかのアプリケーション(8888 Mの特定のポートでリッスンするなど)を作成したい場合があります。
このために、S(2222)の一部のポートをMのポート8888に転送するように設定して、S:2222にアクセスする人は誰でもM:8888にアクセスするように感じることができるようにしたいと思います。
SSHポート転送を試しましたが、最善の試みは次のとおりです。
ssh -L 2222:M:8888 -N M
ただし、これにより、他のコンピュータではなくサーバー自体からのみポート2222にアクセスできます。
これを正しく実行する方法はありますか?これ以上転送が不要になったときに ^C を使って開始して終了できる簡単なコマンドであればいいです。
ベストアンサー1
はい、これがGatewayPorts
SSHで呼び出される方法です。抜粋ssh_config(5)
:
GatewayPorts
Specifies whether remote hosts are allowed to connect to local
forwarded ports. By default, ssh(1) binds local port forwardings
to the loopback address. This prevents other remote hosts from
connecting to forwarded ports. GatewayPorts can be used to spec‐
ify that ssh should bind local port forwardings to the wildcard
address, thus allowing remote hosts to connect to forwarded
ports. The argument must be “yes” or “no”. The default is “no”.
あなたの質問を正しく理解したら、localhost
転送するコンピュータはSSHを使用するのと同じコンピュータであるため、転送に代わりに使用できます。M
したがって、コマンドは次のようになります。
ssh -L 2222:localhost:8888 -N -o GatewayPorts=yes hostname-of-M
そしてそれは次のとおりですnetstat -nltp
。
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 5113/ssh
これで、TCPポート2222を介してこのコンピュータにアクセスしている人は、コンピュータMに示すように実際にlocalhost:8888と通信します。これは、Mに転送される通常のポート8888とは異なります。