Reenviar X11 a través de dos túneles SSH

Reenviar X11 a través de dos túneles SSH

Para trabajar, tengo que hacer ssh desde mi máquina local a través de la Máquina A para llegar a la Máquina B. El problema es que la Máquina A no tiene reenvío X11 y no tengo privilegios de superusuario para cambiar eso. Tengo privilegios de superusuario en la máquina B y tiene activado el reenvío X11.

¿Hay alguna manera de reenviar X11 desde B a través de A a mi máquina local, sin que el reenvío X11 esté activado en A?

Intenté ejecutarlo ssh -t -X user@A ssh -X user@By ssh -t user@A ssh -X user@B la Máquina A todavía genera resultados X11 forwarding request failed on channel 0al iniciar sesión.

Respuesta1

agregue esto a su ~.ssh/config:

Host BviaA
  HostName      hostB
  ProxyCommand  ssh user@hostA nc %h %p 2> /dev/null

Entonces ssh -X user@BviaAdebería funcionar

Tenga en cuenta que en la sección de configuración anterior he utilizado Host BviaApara que sea más obvio lo que sucede. También puede utilizar Host hostBpara que funcione de forma totalmente transparente: ssh -X user@hostB(como si no se necesitara una puerta de enlace).

Alternativamente, como una sola línea para realizar pruebas sin ningún cambio de configuración:

ssh -X -oProxyCommand="ssh user@hostA nc %h %p" user@hostB

Respuesta2

Muchas gracias @rudimeier por tu respuesta.

tuve un problema conCarolina del Norteopción cuando se usa ssh, pero esta variación (basada en lo que explicó @aDroidaquí) funcionó para mí. Entonces esto es esencialmente lo mismo.respuesta de una sola líneade @rudimeier para versiones más recientes de OpenSSH:

$ ssh -X -oProxyCommand="ssh [email protected] -W %h:%p" [email protected]

@usuario4556274respuestaTambién funcionó para mí (gracias a ti también).

Simplemente agregaría nombres de usuario en ambos pasos para aclarar cómo funciona para novatos como yo (después de escribir el primer comando, el puerto localhost 2222 se comportará como si fuera el puerto 22 en la máquina B; por lo tanto, en el segundo comando pasamos el nombre de usuario de la máquina B):

$ ssh -Nf -L2222:destination.host-B.address:22 [email protected]
$ ssh -p 2222 -X userB@localhost

Respuesta3

Es posible que pueda reenviar puertos a través de A. Utilice

$ ssh -Nf -L2222:B:22 A

para iniciar y poner en segundo plano un proceso ssh que se reenviará desde su máquina local a B a través de A. Luego conéctese a B usando

$ ssh -p 2222 -X localhost

información relacionada