web-dev-qa-db-ja.com

sshからprivate-ip

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

18
Kokizzu

あなたが探しているものは、逆トンネルと呼ばれています。 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台のコンピュータlappyremoteyがあります。そこで、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トンネルが次のように機能していることがわかります。

  1. remoteyにログイン

    [user@lappy ~]$ ssh remotey
    
  2. リバーストンネルポートをテストする

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. 今度はラッピーに戻ります

    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 ~]$ 
    

Localhost(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以外にバインドすることはできません。

GatewayPortsを有効にする

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での接続。

接続のテスト(パートdeux)

今度はテストして、セットアップを変更しました。主な違いは、localhostに接続する必要がないことです。

  1. remoteyにログイン

    [user@lappy ~]$ ssh remotey
    
  2. リバース接続をテストする

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. 今度はラッピーに戻ります

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

参考文献

14
slm

コンピューター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
1
Kokizzu