CentOS(コンピューターA)を備えたコンピューターにプライベートIP 10.150.5.141(制限付きファイアウォール)が設定されており、インターネットにアクセスでき、実際のIP w.x.y.zでArchLinux VPS(コンピューターB)にアクセスできます。
コンピューターBにアクセスしてコンピューターAに接続できる別のPC(コンピューターC)を作成できますが、コンピューターCはコンピューターAに直接接続できません(Aのプライベートネットワーク上にあるため)。
トンネルが別のcomputer:portへのローカルポートを開くことができることは知っていますが、その反対の方法は?
コンピューターBを介してssh
を使用してコンピューターAにアクセスしたいが、コンピューターBはコンピューターAにアクセスできません。これは、コンピューターAのネットワークが制限されているためです(外出できますが、アクセスできません。彼らのルーター)
私はこのようなものが欲しい:
ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22
だから私はssh w.x.y.z:vvv
コンピューターCからプライベートネットワークに転送されます10.150.5.141:22
。
あなたが探しているものは、逆トンネルと呼ばれています。 ssh
は-R
スイッチ:
-R [bind_address:]port:Host:hostport
Specifies that the given port on the remote (server) Host is to
be forwarded to the given Host and port on the local side. This
works by allocating a socket to listen to port on the remote side,
and whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to Host
port hostport from the local machine.
OPが回答とともに発見したため、構文は次のとおりです。
$ ssh -f -N -R vvv:localhost:22 w.x.y.z
ネットワーク上に2台のコンピュータlappy
とremotey
があります。そこで、lappy
で次のコマンドを実行します。
$ ssh -f -N -R 12345:localhost:22 remotey
私はそれが機能していることを確認できます:
$ ps -eaf|grep "[l]ocalhost:22"
saml 27685 1 0 11:10 ? 00:00:00 ssh -f -N -R 12345:localhost:22 remotey
次に、リモートシステムに個別にssh
_remotey
してこのコマンドを実行すると、リモートシステムのローカルインターフェイスのポート12345で接続を受け入れていることがわかります。
$ netstat -an|grep :12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
tcp 0 0 ::1:12345 :::* LISTEN
リバースsshトンネルが次のように機能していることがわかります。
remotey
にログイン
[user@lappy ~]$ ssh remotey
リバーストンネルポートをテストする
[user@remotey ~]$ ssh -p 12345 localhost
今度はラッピーに戻ります
user@localhost's password:
Last login: Thu Aug 1 17:53:54 2013
/usr/bin/xauth: creating new authority file /home/user/.Xauthority
[user@lappy ~]$
lo
)以外のインターフェース上のポート?このようなコマンドを実行しても動作しない場合や、常にlocalhost(lo
)インターフェースのポートにバインドする場合は、頭を悩ませる可能性があります。
例えば:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
注:このコマンドは、ポート12345 @ remoteyを開き、すべての接続をポート22 @ lappyにトンネルするように指示します。
次にリモートで:
remotey$ netstat -an|grep 12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
sshd
の設定では、これを行うことができません。実際、この機能を有効にしないと(GatewayPorts
)、ssh
トンネルポートをlocalhost以外にバインドすることはできません。
remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no
有効にするには、このファイルを編集します/etc/ssh/sshd_config
:
GatewayPorts clientspecified
そしてsshd
を再起動します:
remotey$ Sudo service sshd restart
もう一度試してみてください。そうすれば、効果がわかります。
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
そして今度はリモートでそれを再確認してください:
remotey$ netstat -anp | grep 12345
tcp 0 0 192.168.1.3:12345 0.0.0.0:* LISTEN 9333/sshd
注:上記では、sshd
プロセスがIPアドレス192.168.1.3を持つインターフェースでリッスンしていることがわかります。ポート12345での接続。
今度はテストして、セットアップを変更しました。主な違いは、localhostに接続する必要がないことです。
remotey
にログイン
[user@lappy ~]$ ssh remotey
リバース接続をテストする
[user@remotey ~]$ ssh -p 12345 remotey
今度はラッピーに戻ります
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
コンピューターBはコンピューターAにアクセスできないため、最初にコンピューターAからリモートトンネルを開く必要があります。
ssh user@computerB -R vvv:localhost:22
気にしないで、私は答えを見つけました:
ssh -f -N -R vvv:localhost:22 w.x.y.z
コンピュータAから
編集:TL、DR、正しい解決策:
ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z