
Tengo una computadora portátil que, obviamente, a veces puede estar dentro o fuera de mi red doméstica. Cuando necesito conectarme por SSH a una máquina dentro de mi red, la conexión es bastante sencilla:
localhost $ ssh machinelearning
Cuando intento acceder a la máquina desdeafuerade mi red, luego necesito conectarme a mi enrutador, luego SSH desde allí:
localhost $ ssh router.mytotallyuniquedomain.com
router $ ssh machinelearning
Recuerdo que había un atajo para ejecutar el último comando en ~/.ssh/config
, pero por el momento no recuerdo cuál es.
¿Hay alguna manera de proporcionar varios nombres de host o tipos de conexiones para que cuando haga esto:
$ ssh machinelearning
SSH primero intentará conectarse al machinelearning
host en la red local y luego intentará hacer un túnel a través de router.mytotallyuniquedomain.com
, ¿todo sin que tenga que escribir el nombre de host largo?
Respuesta1
Método n.º 1: ProxyCommand y netcat
Utilizo esta configuración en mi $HOME/.ssh/config
para facilitar esto:
Host intserver1-o intserver2-o intserver3-o
ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p
Luego puedo ssh intserver2-o
desde donde sea y entro en este servidor interno. Cuando estoy en casa en la LAN uso ssh intserver1
.
NOTA:El truco anterior requiere netcat ( nc
) instalado en extserver1.
Método #2: ssh anidado
Alternativamente, también puedes utilizar este método:
$ ssh -t -l gatewayuser gatewayserver "ssh -l serveruser internalserver"
Básicamente, estás anidando llamadas SSH en este método.
Método n.º 3: ProxyCommand y ssh -W
Con las versiones más nuevas de SSH (5.4+), puede usarlo ssh
en lugar de hacerlo nc
a través del -W
conmutador.
Host TARGETHOST
ProxyCommand ssh -W %h:%p PROXYHOST
Los %h
& %p
son macros para el puerto del nombre de host que se utilizaron para TARGETHOST
.