ファイアウォールの背後にあるサーバーで作業しています。私は次のようにインターネットの中間サーバーへの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
どうすればこれを達成できますか?
これはリモートサーバーで開かれるトンネルであるため、そのサーバーの/ etc/ssh/sshd_configでGatewayPortsをyesに設定する必要があります。
そのサーバーのユーザーの種類によっては、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
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) を参照してください。