ssh a través de múltiples hosts

37

Para llegar a mi máquina en mi oficina, en este momento estoy haciendo esto:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
[email protected]:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

¿Hay una manera fácil de automatizar este proceso, quizás un solo comando que pueda usar al final?

Lucas
fuente

Respuestas:

31

Puede usar el cliente ssh para ejecutar ssh en la máquina remota al iniciar sesión.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(La razón que incluyo -ten las invocaciones es porque ssh me estaba dando errores re: stdin no era un terminal cuando lo probé en mi propia máquina; su máquina puede ser diferente).

Cuando salga del último shell, el proceso saldrá en cadena, lo que le ahorrará escribir Ctrl-Duna y otra vez.

anfetamaquina
fuente
Tenga en cuenta: solo agregue "-t" si solo inicia sesión en la máquina remota. Para iniciar un comando en la máquina remota, NO los coloque ya que pueden / corromperán algunas cosas (por ejemplo tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " : ¡podría corromperse si agrega -t! Vea, por ejemplo, la maravillosa respuesta de StephaneChazelas unix.stackexchange.com/questions/151916/ ... )
Olivier Dulac
3
Usar -J es más seguro que esta respuesta, porque entonces tienes la posibilidad de almacenar todas las claves ssh en tu computadora local. La opción -J se introdujo en la versión 7.3 de openssh como se menciona en la respuesta de @Miikka
Erik Sjölund el
1
@ ErikSjölund Openssh no permite más de una -Jopción. Creo que podría hacerlo con múltiples ProxyCommandopciones en su configuración.
anfetamáquina
1
@amphetamachine Con -Justed puede especificar una lista de saltos separados por comas para pasar. Pero usar ProxyCommandcon -Wsigue siendo un enfoque mucho mejor que esta respuesta si está usando una versión demasiado antigua para admitir -J.
kasperd
35

Sí, hay una excelente manera de hacerlo usando ssh ProxyCommand y netcat

Ponga algo como esto en su .ssh / config

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

Esto iniciará sesión directamente en cualquier servidor .department.university.com usando el host jump / bastion unix.university.com. También puede necesitar una estrofa para unix.university.com directamente.

Aquí hay un enlace que explica cómo funciona: http://backdrift.org/transparent-proxy-with-ssh

Con esta técnica, ahora solo puedes escribir

ssh unix.department.university.com

y todo aparecerá directo. Las herramientas como rsync, scp, etc. (cualquier cosa en la pila ssh) también funcionarán de manera transparente.

Aaron Brown
fuente
2
+1 Uso algo similar a esto para enviar datos desde una red de prueba a una red de productos a través de un servidor de ensayo.
Arcege
2
Sí, esto funciona muy bien!
Gabe.
15
Solo para las versiones más nuevas de ssh compatibles con la -Wopción, puede hacer algo como en ProxyCommand ssh -W %h:%p gatewaylugar de depender de nc
Ulrich Dangel
¡Bueno saber! Thx
Aaron Brown
2
funciona muy bien si el nombre del usuario es el mismo en todas las máquinas; si es diferente, tienes que hacer algo comoProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu
9

En OpenSSH 7.3, ssh agregó el -Jindicador de línea de comando y la ProxyJumpopción de configuración correspondiente para resolver exactamente este problema.

Proporcione a los hosts a los que desea enviar una lista separada por comas -J. Por ejemplo:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com
Miikka
fuente
-5

Túneles SSH. No recuerdo exactamente cómo hacer esto, sin embargo, sé que hay una manera de hacer que una máquina permita básicamente un túnel mediante la conexión a un puerto separado. De esa manera, simplemente navega a la misma máquina inicial (con un puerto diferente, por ejemplo) y lo dejará en su ubicación final.

Sin embargo, tendría que buscar cómo configurarlo.

:)

Anthony Hurst
fuente
No quiere (y probablemente no pueda) abrir un puerto o la puerta de enlace ssh de su universidad ...
Stéphane Gimenez
99
Si no sabe cómo hacerlo y no puede molestarse en buscarlo, ¿por qué publicó esta respuesta?
anfetamáquina
44
Realmente no es una respuesta
gabe.