Tengo tres Computadoras.
PC1 y PC2 está en una LAN privada, donde PC1 se conoce como PC2 como 192.168.0.2
PC2 y PC está en otra LAN, donde PC2 se conoce como PC como 192.168.123.101
¿Cómo puedo conectarme a PC1 desde PC con SSH?.
Hay algo como:
ssh [email protected] -via [email protected]
ssh -o 'ProxyCommand ssh -W %h:%p [email protected]'
Entonces simplemente puede ejecutar ssh PC1
.
Se utiliza 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 el -W
opció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
Usando SSH hay una solución clara:
en su máquina local configure su ~/.ssh/config
tal que tenga lo siguiente:
Host WhatYouWillCallTheConnection
hostname the.gateway.server.address.com
user YourUsernameOnTheGateway
Tanto en la puerta de enlace como en el servidor final al que te gustaría conectarte, asegúrate de tener las claves públicas de tu cliente local ubicadas en ~/.ssh/authorized_keys
En la máquina de la puerta de enlace, debe modificar el ~/.ssh/authorized_keys
tal que al principio 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....
Los -A
es reenviar al agente si no le gusta enviar contraseñas todo el tiempo ...
De esta forma, siempre que hagas algo como ssh WhatYouWillCallTheConnection
se ejecutará directamente a través de la puerta de enlace y lo conectará con el servidor en el otro lado de forma transparente.
El reenvío de puertos puede resultar ú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 con +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.
~# ssh -l <user> -p 7777 localhost
Y debería estar en PC3.
También puede usar -D para reenviar dinámicamente un puerto si desea que se establezca un proxy SOCKS.
~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2
¡Salud!
La 2017+ (desde ssh v7.3) -respuesta a esto es ProxyJump :
ssh -J [email protected] [email protected]
, que es la abreviatura de:
ssh -o "ProxyJump [email protected]" [email protected]
Esto se puede abreviar a ssh dest
con un ~/.ssh/config
fragmento como tal:
Host jump
User MyJumpHostUser
Hostname Jump.Host.tld
Host dest
ProxyJump jump
User MyDestUser
Hostname des.tin.ATI.on
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 para cruzar varias computadoras intermedias antes de realizar el trabajo.
Hace un tiempo encontré esto README.sshhop en la MIT Lincoln Laboratory Homepage, pero no pude encontrar más información sobre eso. ¿Alguien sabe más ?