web-dev-qa-db-ja.com

リバースsshトンネルが間違ったインターフェイスでリッスンする

ファイアウォールの背後にあるサーバーで作業しています。私は次のようにインターネットの中間サーバーへのsshトンネルを確立しました:

remoteuser@behind_fw$ ssh -N -f -R 10002:localhost:22 middleuser@middle

しかし、私はこのサーバーを介して直接接続することはできません、これは機能しません:

user@local$ ssh remoteuser@middle -p 10002

2つのステップで接続する必要があります。

user@local$ ssh middleuser@middle
middleuser@middle$ ssh remoteuser@localhost -p 10002

中央のnetstat -lの出力:

tcp        0      0 localhost:10002         *:*                     LISTEN

しかし、それは次のようなものでなければなりません:

tcp        0      0 *:10002                 *:*                     LISTEN

どうすればこれを達成できますか?

5
jigfox

これはリモートサーバーで開かれるトンネルであるため、そのサーバーの/ etc/ssh/sshd_configでGatewayPortsyesに設定する必要があります。

そのサーバーのユーザーの種類によっては、Matchオプションを使用して、その機能をユーザーに制限することをお勧めします。

Match User middleuser
  GatewayPorts yes

このMatchブロックは、別のブロックが開始するかファイルが終了するまで続くため、sshd_configの最後に追加することをお勧めします。

そうは言っても、代わりに私が少しクリーンな解決策と考えるものを試してみませんか?

user@local$ ssh -N -f -L 10002:behind_fw:22 middleuser@middle
user@local$ ssh remoteuser@localhost -p 10002
10
andol

OpenSSHを使用していると仮定すると、バインドアドレスを指定する必要があります。次のようなものを試してください:

ssh -N -f -R *:10002:localhost:22 middleuser@middle

または

ssh -N -f -R :10002:localhost:22 middleuser@middle

-Rの署名は次のとおりです。

-R [bind_address:]port:Host:hostport

openSSHで。セキュリティ上の理由から、指定しない場合はデフォルトでlocalhostになります。構成によっては、GatewayPortsを機能させるために変更する必要がある場合があります。詳細については、 SSH(1) を参照してください。

3
pehrs