デバイスは、既知の特定のポートでリモートサーバーに接続し続けます。
リモートサーバーには開いているTCPポート以外には何もありません。
リモートサーバーのポートをマイコンピュータに転送し、TCPサーバーを開いてデータを読みたいと思います。
最終的に私はこれを達成するためにPythonを使用したいのですが、
私はssh:を使ってこれをやろうとしています。内側(ssh -N -R 10000:localhost:10000 username@hostname
マイ
コンピュータ)では、ポート10000でリッスンするためにPythonを使用してソケットを開こうとします。開こうとするヘラクレスただし、TCPサーバーをシミュレートすると、データは受信されません。
確かに何か抜けたものがあるようですが、それは何ですか?
psリモートサーバーでTCPサーバーを開くとデータを取得できますが、マイ
コンピュータで接続を制御する必要があります。
答え1
関連部分は次のとおりです。-R
ssh
マニュアルページから:
-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デーモンを再ロードする必要があります。