ssh à private-ip

J'ai un ordinateur avec CentOS (ordinateur A) qui a configuré comme un ip privé 10.150.5.141 (avec un pare-feu restreint), peut accéder à Internet et mon ArchLinux VPS (ordinateur B) avec une réelle ip wxyz

Comment puis-je faire un autre ordinateur (ordinateur C) qui pourrait accéder à l'ordinateur B pour se connecter à l'ordinateur A, mais l'ordinateur C ne peut pas se connecter directement à l'ordinateur A (car il est sur le réseau privé de A)?

Je sais qu'un tunnel peut ouvrir des ports locaux à un autre ordinateur: port, mais comment faire le contraire?

Je veux accéder à l'ordinateur A en utilisant ssh par l'ordinateur B mais l'ordinateur B ne peut pas accéder à l'ordinateur A, parce que le réseau sur l'ordinateur A est ressortingctif (peut sortir, mais ne peut pas entrer, parce que je n'ai pas access à leur routeur)

Je veux quelque chose comme ça:

 ssh -connect-to wxyz:22 -open-port vvv -forward-to 10.150.5.141 -port 22 

de sorte que lorsque je ssh wxyz:vvv de l'ordinateur C, il sera transmis au réseau privé 10.150.5.141:22 .

Ce que vous cherchez s'appelle un tunnel inverse. ssh fournit via le commutateur -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 listn 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. 

Comme l'OP a découvert avec leur réponse, la syntaxe est la suivante:

 $ ssh -f -N -R vvv:localhost:22 wxyz 

Exemple

J'ai 2 ordinateurs sur le réseau, lappy et remotey . Donc, lappy command suivante sur lappy :

 $ ssh -f -N -R 12345:localhost:22 remotey 

Je peux confirmer que ça marche:

 $ ps -eaf|grep "[l]ocalhost:22" saml 27685 1 0 11:10 ? 00:00:00 ssh -f -N -R 12345:localhost:22 remotey 

Maintenant, si je ssh séparément vers le système distant, remotey et exécuter cette command, je peux voir qu'il accepte maintenant les connections sur le port 12345 sur l'interface locale du système distant:

 $ netstat -an|grep :12345 tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN tcp 0 0 ::1:12345 :::* LISTEN 

Test de la connection

Vous pouvez voir que le tunnel ssh inverse fonctionne comme suit.

  1. connection à remotey

     [user@lappy ~]$ ssh remotey 
  2. tester le port du tunnel inversé

     [user@remotey ~]$ ssh -p 12345 localhost 
  3. devrait maintenant être de return sur lappy

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

Ports sur des interfaces autres que localhost ( lo )?

Vous risquez de vous égratigner la tête si vous essayez une command comme celle-ci et cela ne semble pas fonctionner, ou il se lie toujours à un port de l'interface localhost ( lo ).

Par exemple:

 lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey 

REMARQUE: Cette command indique d'ouvrir le port 12345 @ remotey et de tunneler toutes les connections au port 22 @ lappy.

Ensuite, à distance:

 remotey$ netstat -an|grep 12345 tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN 

Ce qui se passe, c'est que les configurations de sshd ne vous permettent pas de le faire. En fait, sans cette fonctionnalité activée ( GatewayPorts ), vous ne pourrez pas lier les ports du tunnel ssh à quoi que ce soit, à l'exception de localhost.

Activation des GatewayPorts

 remotey$ grep GatewayPorts /etc/ssh/sshd_config #GatewayPorts no 

Pour l'activer, éditez le file /etc/ssh/sshd_config :

 GatewayPorts clientspecified 

Et redémarrez sshd :

 remotey$ sudo service sshd restart 

Maintenant, essayez à nouveau et nous devrions voir l'effet que nous recherchons:

 lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey 

Et double le vérifier cette fois sur remote:

 remotey$ netstat -anp | grep 12345 tcp 0 0 192.168.1.3:12345 0.0.0.0:* LISTEN 9333/sshd 

NOTE: Dans ce qui précède, nous pouvons voir que le process sshd écoute maintenant sur l'interface qui a l'adresse IP 192.168.1.3, pour les connections sur le port 12345.

Test de la connection (deuxième partie)

Maintenant, avec notre configuration modifiée lorsque nous testons cette fois. La principale différence est que nous n'avons plus besoin de nous connecter à localhost!

  1. connection à remotey

     [user@lappy ~]$ ssh remotey 
  2. tester la connection inverse

     [user@remotey ~]$ ssh -p 12345 remotey 
  3. devrait maintenant être de return sur lappy

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

Les references

  • Comment faire un tunnel SSH inverse
  • SSH / OpenSSH / PortForwarding
  • tunnel ssh via plusieurs sauts
  • Comment fonctionne le tunnel SSH inverse?
  • ssh tout le time
  • Inverser une connection ssh
  • enstringment des tunnels ssh
  • Créer un tunnel SSH à l'intérieur d'une string de tunnels SSH par exemple
  • Contournement du pare-feu d'entreprise avec reverse ssh port forwarding
  • Tunnel de port inversé

Comme l'ordinateur B ne peut pas accéder à l'ordinateur A, vous devez d'abord ouvrir un tunnel distant depuis l'ordinateur A.

 ssh user@computerB -R vvv:localhost:22 

nevermind, j'ai trouvé la réponse:

 ssh -f -N -R vvv:localhost:22 wxyz 

de l'ordinateur A

EDIT: TL; DR, solution correcte:

 ssh -f -N -R wxyz:vvv:localhost:22 wxyz