Tunnel una conexión ssh a través de una máquina intermedia en un solo comando

10

¿Hay alguna manera, en un solo comando, de establecer una conexión ssh desde mi computadora A, a través de la computadora B, a la computadora C, de modo que tenga acceso al shell en la computadora C?

Una arruga (que parece descartar simplemente reenviar la conexión ssh usando la opción -L) es que tengo la contraseña de la cuenta en la computadora B, y la cuenta en la computadora B está autorizada para conectarse a la cuenta en la computadora C, pero No tengo la contraseña de la cuenta en la computadora C.

cordura
fuente

Respuestas:

8

Comprendí que solo desea iniciar sesión en la computadora C, no realmente hacer un túnel de A a C. Entonces, esto debería ser el truco:

ssh -t computer-b "ssh computer-c"

Es posible que deba ingresar contraseñas dos veces, primero para la computadora B y luego para la computadora C, pero esto se puede evitar utilizando la autenticación de par de claves de ssh.

af.
fuente
1
Gracias, funciona! Si puedo ser tan audaz como para pedir un seguimiento. ¿Alguna idea de cómo puedo scp un archivo de A a C en un solo comando?
cordura
Eso es un poco complicado. Podría hacerse agregando alquitrán a la mezcla, pero si es solo un archivo y la computadora B tiene espacio en el disco para guardarlo por un tiempo, es mucho más fácil copiarlo en dos pasos.
af.
¡También puedes hacer esto tres veces! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak
0

Probablemente desee utilizar ProxyCommand de SSH: http://benno.id.au/blog/2006/06/08/ssh_proxy_command

Rory
fuente
No puedo encontrar una manera de hacer que esto funcione porque no tengo la contraseña para la computadora C, y este enfoque parece requerirla. Sin embargo, está abierto a sugerencias, ya que este enfoque parece más elegante.
cordura
0

Si está utilizando claves ssh, podría generar una nueva clave para la máquina B y usarla para la conexión de A a B. En la máquina B, puede agregar

command="ssh C" ssh-....

en el ~/.ssh/authorized_keysarchivo Eso significa que siempre que se conecte a B con esa clave ssh, ejecutará el ssh Ccomando.

No sé si esto funciona con scp.

Rory
fuente
0

Utilizar ProxyCommand

Ver man ssh_config. Recomiendo hacer uso de ProxyCommand. Tomemos su escenario original:

  • Computadora A (su computadora)
  • Computadora B (un nombre de host proxy)
  • Computadora C (solo accesible a través de SSH desde la Computadora B)

Edite ~/.ssh/configcon los siguientes contenidos.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Ahora podrá llegar de manera transparente a la computadora C. ej.

ssh computerc

Ventajas de este método

Más seguro

Solo necesita su clave privada para estar en la computadora A (su computadora). El nccomando actuará como un proxy en el que SSH cifrará el tráfico. Esto incluye autenticación. Es una muy mala idea distribuir su clave privada a varios servidores (ya que cualquier servidor comprometido con su clave privada en última instancia compromete su clave privada).

Partidos Múltiples destinos

Se pueden combinar varias computadoras de destino usando Host. Una sola computadora o cualquier computadora dentro de una red específica (por ejemplo, 192.168.35.0/24en el ejemplo anterior) a proxy a través de la computadora B. También sirve como un alias.

ssh 192.168.35.27

En el ejemplo anterior, enviará un proxy a través de la computadora B para llegar a la dirección IP.

Proxies en cadena de margaritas

Con este método, puede conectar en cadena tantos servidores proxy automáticos como sea necesario. por ejemplo, puede agregar una computadora D a la que solo se puede acceder desde la computadora C y funcionará de manera transparente.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdautomáticamente proxy a través de la computadora C y la computadora B en los ssh_configejemplos anteriores .

Sam Gleske
fuente
Estoy usando ProxyJump en lugar de ProxyCommand y funciona bien. Parece que ahora hay más opciones.
fgiraldeau