リモートTCPポートをローカルポートに転送

リモートTCPポートをローカルポートに転送



私は次の設定を持っています: 設定図

デバイスは、既知の特定のポートでリモートサーバーに接続し続けます。
リモートサーバーには開いているTCPポート以外には何もありません。
リモートサーバーのポートをマイコンピュータに転送し、TCPサーバーを開いてデータを読みたいと思います。

最終的に私はこれを達成するためにPythonを使用したいのですが、
私はssh:を使ってこれをやろうとしています。内側(ssh -N -R 10000:localhost:10000 username@hostnameマイ
コンピュータ)では、ポート10000でリッスンするためにPythonを使用してソケットを開こうとします。開こうとするヘラクレスただし、TCPサーバーをシミュレートすると、データは受信されません。

確かに何か抜けたものがあるようですが、それは何ですか?
psリモートサーバーでTCPサーバーを開くとデータを取得できますが、マイ
コンピュータで接続を制御する必要があります。

答え1

関連部分は次のとおりです。-Rsshマニュアルページから:

-R [bind_address:]port:host:hostport

[...]

基本的に、サーバーのTCPリスニングソケットはループバックインターフェイスにのみバインドされます。。これBind_addressを指定してオーバーライドできます。。一つ空のバインディング_アドレスまたはアドレス '*'、リモートソケットがすべてのインタフェースを受信する必要があることを示します。GatewayPorts リモートバインディングアドレッシングは、サーバーオプションが有効になっている場合にのみ成功します(参照:sshd_config(5))。

リモートサーバーのリスニングソケットはリスニングのみです。ローカルホストしたがって、UNITからの接続が拒否されます(つまり、「閉じています」)。

したがって、サーバーが既に許可している場合は、次のようにしてください。

ssh -N -R :10000:localhost:10000 username@hostname

:前には「空のバインドアドレス」があります(実際のリモートサーバーのUNIT接続IPアドレスを使用することもできます)。これは次のように改善する必要があります。

ssh -o ExitOnForwardFailure=yes -N -R :10000:localhost:10000 username@hostname

誤って2回実行されるのを防ぎます。

ただし、このタイプのバインディングアドレスは通常、リモートサーバーのアドレスとしては許可されません。SSHD次のように構成されていますGatewayPorts変わらなければなりません。リモートサーバーでは、構成ファイルは/etc/ssh/sshd_config通常、次の(コメントなし)エントリを持つように変更する必要があります。

GatewayPorts clientspecified

そして新しい設定を使用するには、sshデーモンを再ロードする必要があります。

関連情報