Sesión X Window remota con SSH
Este método entunela las X mediante SSH, de manera que toda la información circula cifrada por la red, a diferencia del protocolo XDMCP que trasmite la información sin cifrar. SSH utiliza el puerto 22 TCP, por lo que tendremos que abrirlo en el firewall. (Puede usarse Telnet pero usaremos SSH por seguridad).
- Abriremos una sesión X en el host cliente utilizando el comando xinit
(no usaremos startx, ya que lanza el window manager):
$ xinit
Obtendremos una sesión X en la primera tty libre (si no tenemos otra sesión gráfica abierta será la terminal tty7) con un xterm abierto. En ese xterm ejecutaremos el comando:
$ xhost +nombre_de_host
Atención
Nunca usaremos el comando xhost +, ya que permite a cualquier cliente conectarse y tomar el control de las X. Siempre especificaremos un host.
- A continuación, abriremos una sesión SSH en el servidor desde cualquier
terminal del host cliente, ejecutando en el host cliente el comando:
$ ssh <IP_servidor>
Por ejemplo:
$ ssh 192.168.1.3
- En la terminal SSH, estableceremos el valor de la variable DISPLAY, ejecutando el comando:
$ export DISPLAY=<IP_host_cliente>:0
Por ejemplo:
$ export DISPLAY=192.168.1.2:0
- Por último, ejecutaremos en la terminal SSH el comando que lanza el window
manager (por ejemplo, icewm-session):
$ icewm-session
De esta manera obtendremos en la terminal tty7 la sesión X remota.
En el host cliente tendremos activos los procesos servidor X (Xorg) y xterm, que cuelgan de xinit, y ssh:
$ pstree init-+- |-login---bash-+-xinit-+-Xorg | |-xterm---bash |-ssh
Y en el servidor tendremos activo el proceso window manager (por ejemplo, icewm-session), que cuelga del demonio sshd:
$ pstree init-+- |-sshd---sshd---bash---icewm-session
- Si ya teníamos en el host cliente una sesión X local abierta, para iniciar una sesión X
remota tendremos que especificar el DISPLAY tanto al lanzar xinit:
$ xinit -- :1 $ xhost +
como al exportar la variable DISPLAY en la terminal SSH:
$ export DISPLAY=192.168.1.2:1 $ icewm-session
Obtendremos una sesión X en la primera tty libre (por ejemplo la terminal tty8).
- De la misma manera, si queremos abrir otra sesión X remota en el host cliente
tendremos que especificar el DISPLAY tanto al lanzar xinit:
$ xinit -- :2 & $ xhost +
como al exportar la variable DISPLAY en la terminal SSH:
$ export DISPLAY=192.168.1.2:2 $ icewm-session
Obtendremos una sesión X en la primera tty libre (por ejemplo la terminal tty9).
En el host cliente tendremos activos los procesos:
$ pstree init-+- |-login---bash-+-xinit-+-Xorg | | |-xterm---bash | |-ssh |-login---bash-+-xinit-+-Xorg | |-xterm---bash |-ssh
Y en el servidor tendremos activos los procesos:
$ pstree init-+- |-sshd-+-sshd---bash---icewm-session |-sshd---bash---icewm-session
8 Comentarios en “Sesión X Window remota con SSH”
Deja un comentario
Muy buen texto, bien explicado. Aunque tengo una pregunta. ¿Desde Windows XP se puede tener acceso por SSH a un host con Gnu/Linux? Gracias.
David, es perfectamente posible acceder desde Windows mediante SSH a un host GNU/Linux, sólo necesitas un cliente SSH para Windows, como Putty. Más info en Conexión remota segura en Linux: SSH
Hola, estoy intentando seguir los pasos que marcas, pero tengo un problema. Al conectar remotamente por ssh e intentar cambiar el display mediante export DISPLAY=xxx.xxx.xxx:0.0 en realidad aunque por ssh al hacer un echo $DISPLAY vea que se ha cambiado bien el valor, si voy al ordenador al que me había conectado de forma remota mediante ssh, y ejecutar ahí el echo $DISPLAY me sale :0.0.
Es decir, no lo ha cambiado aunque desde ssh me diga que sí. Si lo cambio de forma presencial el display en el ordenador remoto, sí que me funciona ya todo.
¿Sabes a qué se puede deber esto?
Un saludo,
Mikel
¿y como hago para ver el escritorio de una maquina con XP desde una tty de linux?
Saludos
He tenido algunos problemillas..
$ xinit — :1 ———–>funciona
$ xhost + ———–>funciona
$ export DISPLAY=192.168.1.2:2 ———–>funciona
hasta aqui todo bien
$ startxfc4 ————>No funciona :(
$sudo startxfc4 ———–>funciona
Luego me doy cuenta que no tiene permiso en un archivo llamado .ICEauthority
que esta en el directorio home de usuario. de 600 le cambio a 666
$ startxfc4 ————>funciona
¿Si lo dejo con esos permisos me trae algun otro problema?
Si cambio de terminal se pierde..¿Existe alguna manera de que no pierda?
Cuando hago un pstree me sale algo asi.. No como a ti..
$ pstree
init-+-
|-login—bash-+-xinit-+-Xorg
|-xterm—bash—ssh
¿Estoy haciendo algo mal?
Salu2
Muchísimas gracias… me sirvió espectacular, lo único que te faltó es que si ya existe una sesión X iniciada en el Display 0, hay que escribir
#: xinit — :1 (o 2 o el número tty que se desee)
y donde corresponda:
#: export DISPLAY=:1 (o 2 o el número tty que se puso anteriormente)
Saludos!
GROSOOOOOOO
Me sirvió de mucho lo del export DISPLAY!!! Muchas Gracias!!!
Solo les quería comentar que esto me sirvio para conectarme remotamente con sesión gráfica a mi fedora 13 desde mi MAC con snow leopard.
Así tal cual como viene aqui.
De hecho no funcionó el google crome por ejemplo (lo despliega en localhost) pero jdownloader lo desplegó remotamente sin problemas…
Saludos y gracias.