¿Cómo me conecto a una PC a través de otra PC usando ssh

13

Tengo tres computadoras.

PC1 y PC2 están en una LAN privada, donde PC1 es conocida por PC2 como192.168.0.2

PC2 y PC3 están en otra LAN, donde PC2 es conocida por PC3 como192.168.123.101

¿Cómo puedo conectarme a PC1 desde PC3 con SSH?

¿Hay algo como:

ssh [email protected] -via [email protected]
Stefan
fuente

Respuestas:

19
ssh -o 'ProxyCommand ssh -W %h:%p [email protected]'

Entonces puedes simplemente correr ssh PC1.

Se usa mejor a través de un alias en ~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p [email protected]

Para versiones anteriores de OpenSSH que no tienen la -Wopción (creo que esto significa ≤5.4), asegúrese de que netcat esté disponible en PC2 y use

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh [email protected] nc %h %p
Gilles 'SO- deja de ser malvado'
fuente
1
+1 Sí, y tengo una respuesta similar stackoverflow.com/questions/1010808/1122282#1122282 con algunos detalles más.
Ephemient
necesario para instalar netcat
Stefan
4

Usando SSH hay una solución clara:

  1. en su máquina local configure su ~/.ssh/configtal que tenga lo siguiente:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. Tanto en la puerta de enlace como en el servidor final al que desea conectarse, asegúrese de tener las claves públicas de su cliente local ubicadas en ~/.ssh/authorized_keys

  3. En la máquina de la puerta de enlace, debe modificar el ~/.ssh/authorized_keysmodo que, al comienzo de la línea que especifica la clave pública de su cliente, agregue el comando forzado de la siguiente manera:

    command="ssh -A [email protected]" ...yourPublicKey....
    

El -Aes reenviar al agente si no desea enviar contraseñas todo el tiempo ...

De esta manera, cada vez que haga algo así ssh WhatYouWillCallTheConnection, se ejecutará directamente a través de la puerta de enlace y lo conectará al servidor en el otro lado de forma transparente.

Shamster
fuente
2
No lo use ssh -Asi no confía en el administrador de la máquina de la puerta de enlace. No puede obtener su clave privada, pero siempre que esté conectado a la puerta de enlace ssh -A, puede usar el agente reenviado para conectarse a otras máquinas como usted.
Jander
2

El reenvío de puertos puede ser útil.
Desde PC1:

~# ssh -fN -L 22:PC3:7777 -l <user> PC2  

7777 puede ser cualquier puerto (siempre que no se esté utilizando). Simplemente me gusta ese número, más cualquier "pedido" que pueda administrar por +1 (7778, 7779, etc., etc.).

Una vez hecho esto, tendrá un túnel 'transparente' desde el puerto local 7777 de la PC1 hasta el puerto 22 de la PC3. Solo emita:

~# ssh -l <user> -p 7777 localhost  

Y deberías estar en PC3.
También puede usar -D para reenviar dinámicamente un puerto si desea establecer un proxy SOCKS.

~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2  

¡Salud!

gusano
fuente
1

La respuesta 2017+ (desde v7.3) a esto es ProxyJump :

ssh -J user@jumphost user@destination

, que es la abreviatura de:

ssh -o "ProxyJump user@jumphost" user@destination

Esto se puede acortar ssh destcon un ~/.ssh/configfragmento como tal:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on
Alex Stragies
fuente
0

La única solución que conozco para esto es ssh scripting con Belier :

Belier permite abrir un shell o ejecutar un comando en una computadora remota a través de una conexión SSH. La característica principal de Belier es su capacidad de cruzar varias computadoras intermedias antes de realizar el trabajo.

Hace un tiempo encontré este README.sshhop en la página de inicio del MIT Lincoln Laboratory, pero no pude encontrar más información al respecto. ¿Alguien sabe más?

echox
fuente