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
me@unix.department:~$ 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?


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.


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.


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

-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.

:)


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.