質問:なぜssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip>
「リッスンポートのリモートポート転送に失敗しました」というエラーが発生しましたか?目的は、NAT動的プライベートIPを持つルーターの背後にあるホストに一貫してSSHで接続するために、ポート転送を使用してリバーストンネルを確立することです。詳細については、画像を参照してください。
試してみました:
リバースSSHトンネル
更新
手順2で次のコマンドを試しました:reduser@redhost:~ ssh greenuser@greenhost -p 2222
そのはず: reduser@redhost:~ ssh greenuser@bluehost -p 2222
ポート2222を使用するときにログインしているホストは実際にはグリーンホストであるため、bluehost IPでgreenuser資格情報を使用します。
_
ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip>
_が「リッスンポートのリモートポート転送に失敗しました」というエラーが発生するのはなぜですか?
リモート側ですでに使用されているポートを使用しようとすると、この正確な警告が表示されます。
netstat
からのbluehost
の出力は、何かがすでにポート_2222
_でリッスンしていることを示しています。それはそれが何であるかを示していません。
ソリューション:
ssh
呼び出しの_2222
_を、bluehost
で使用されていない他のポートに変更します。通常のユーザーはwell-known ports;にバインドできないため、これを_1023
_より大きくするだけです。そうしないと、ポートが使用中かどうかに関係なく、同じ警告が表示されます。Sudo lsof -i TCP:2222
_を使用して、リスニングプロセス(bluehost
上)を識別します。ポートを終了または再構成して、ポート_2222
_を使用可能にします。編集:
あなたの場合、_man ssh
_のこの部分が重要だと思われます:
_-R [bind_address:]port:Host:hostport -R [bind_address:]port:local_socket -R remote_socket:Host:hostport -R remote_socket:local_socket
_[…]デフォルトでは、TCPサーバー上のリスニングソケットはループバックインターフェイスにのみバインドされます。これは、_
bind_address
_を指定することでオーバーライドできます。空の_bind_address
_ 、またはアドレス '_*
_'は、リモートソケットがすべてのインターフェイスでリッスンする必要があることを示します。リモート_bind_address
_の指定は、サーバーのGatewayPorts
オプションが有効になっている場合にのみ成功します(sshd_config(5)
)。
これは、bluehost
の_GatewayPorts yes
_に_sshd_config
_が含まれている必要があることを意味します。詳細については、_man 5 sshd_config
_をご覧ください。後でサービスをリロードすることを忘れないでください。
Bluehostのポート2222に接続がハングしていないことを確認します。 bluehost _lsof -t -i:2222
_で、ポート2222を使用しているプロセスIDがあるかどうかをテストします。さらに、このプロセスを強制終了します(たとえば、kill $(lsof -t -i:2222)
を使用)。
これで問題は解決しました。うまくいけば、この情報は他の誰かにとって有用です。 :)