web-dev-qa-db-ja.com

SSH:「リッスンポートのリモートポート転送に失敗しました」エラーのトラブルシューティング

質問:なぜssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip>「リッスンポートのリモートポート転送に失敗しました」というエラーが発生しましたか?目的は、NAT動的プライベートIPを持つルーターの背後にあるホストに一貫してSSHで接続するために、ポート転送を使用してリバーストンネルを確立することです。詳細については、画像を参照してください。

試してみました:

  1. Google、Stackoverflowなどに関する既存の資料を調査しました。このエラーメッセージに関するトピックがありますが、解決された根本的な原因は、この場合のエラーを解決しないため、この特定のインスタンスとは異なります。
  2. 必要なポートが開いていることを確認するために、いくつかの診断を実行しました。これらの結果の一部を下の画像に示します。

リバースSSHトンネル

Image 1

更新

手順2で次のコマンドを試しました:reduser@redhost:~ ssh greenuser@greenhost -p 2222

そのはず: reduser@redhost:~ ssh greenuser@bluehost -p 2222ポート2222を使用するときにログインしているホストは実際にはグリーンホストであるため、bluehost IPでgreenuser資格情報を使用します。

11
ngm_code

_ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip>_が「リッスンポートのリモートポート転送に失敗しました」というエラーが発生するのはなぜですか?

リモート側ですでに使用されているポートを使用しようとすると、この正確な警告が表示されます。

netstatからのbluehostの出力は、何かがすでにポート_2222_でリッスンしていることを示しています。それはそれが何であるかを示していません。

ソリューション:

  1. ssh呼び出しの_2222_を、bluehostで使用されていない他のポートに変更します。通常のユーザーはwell-known ports;にバインドできないため、これを_1023_より大きくするだけです。そうしないと、ポートが使用中かどうかに関係なく、同じ警告が表示されます。
  2. または、_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_をご覧ください。後でサービスをリロードすることを忘れないでください。

18

Bluehostのポート2222に接続がハングしていないことを確認します。 bluehost _lsof -t -i:2222_で、ポート2222を使用しているプロセスIDがあるかどうかをテストします。さらに、このプロセスを強制終了します(たとえば、kill $(lsof -t -i:2222)を使用)。

これで問題は解決しました。うまくいけば、この情報は他の誰かにとって有用です。 :)

6
jervtub