Como exportar las X por medio de ssh

De zerutek

Saltar a: navegación, buscar
RECORDATORIO
Esto es el típico recordatorio, una anotación en un papel que siempre extravías.
Fuera de su contexto puede no tener ningún sentido.


24/10/2012

Como exportar las X por medio de ssh

Vamos a exportar las X por medio de un túnel ssh y un usuario que no es con el que nos logeamos. Es este ejemplo usamos la máquina "machine" y el usuario destino "oracle", al cual tenemos acceso por medio de sudo.


Tras tener configurado el servidor X en nuestro equipo, procedemos a abrir una sesión ssh contra la máquina objetivo (machine), ya sea por medio del parámetro -X de ssh en línea de comandos, o por medio del de activar "SSH => X11 => Enable X11 forwading" de putty o similares.

  • Nos logeamos a la máquina deseada
ssh -X usuario@machine

Al logearnos de ésta manera, se genera el fichero .Xauthority que genera una clave única para conectarnos por el túnel ssh a nuestro servidor X.

Si lanzamos cualquier aplicación X, esta se tiene que ver en nuestro servidor X, por ejemplo, el relog analógico:

xclock

Para conseguir esto con otro usuario, tenemos que extraer la clave del fichero .Xauthority, para luego autorizar al otro usuario. Esto se realiza con el comando xauth:

  • Listamos las claves que están autorizadas:
usuario@machine$ xauth list
 machine/unix:10  MIT-MAGIC-COOKIE-1  22e640aa656764ee569ef56bc96c867c
  • Cambiamos al usuario oracle (también se puede utilizar su a secas):
sudo su - oracle
  • Autorizamos al usuario oracle a ejecutar programas en nuestro servidor X:
oracle@machine$ xauth add machine/unix:10  MIT-MAGIC-COOKIE-122e640aa656764ee569ef56bc96c867c

Exportamos la variable "DISPLAY" para que apunte al túmel ssh. El número de puerto es el mismo que da la salida de "xauth":

oracle@machine$  export DISPLAY=localhost:10

Ya podemos ejecutar aplicaciones X en nuestor Xserver de manera totalmente segura.

La redirección y el sudo como root

Puede que en algún momento deseemos que un usuario redirija aplicaciones gráficas como root, pero que no tenga acceso a dicho usuario. En versiones "modernas" de sudo, se requiere indicar la ubicación del fichero .Xauthority para que la operativa funcione:

export XAUTHORITY=~/.Xauthority
sudo xclock

Se puede realizar sin exportar la variable, sólo a la hora de ejecutar el programa requerido:

sudo XAUTHORITY=~/.Xauthority xclock

Posibles problemas

  • Los Xserver para windows suelen ser difíciles de configurar. Prestar especial atención a la configuración de seguridad.
  • Algunos Xserver para windows son realmente malos. Probar otros puede ser LA alternativa (por ejemplo, instalar vcxsrv o Cygwin/X
  • Hay que asegurarse que el cliente ssh exporta realiza correctamente el túnel para las X. Esto se puede comprobar si la varible DISPLAY es generada "automágicamente" en la máquina remota.
  • El servidor ssh debe redireccionar las X para que esto funcione. Para realizarlo hay que activar la directiva X11Forwarding del fichero /etc/ssh/sshd_config

Redirección extremadamente lenta

En una máquina AIX este procedimiento funcionaba, pero con unos tiempos de respuesta realmente lentos. El problema era que la variable LANG estaba mal definida:

LANG=ES_ES.UTF-8

Un vistazo detallado delata que el segundo ES debiera ser es

LANG=es_ES.UTF-8

Definiendo correctamente la variable o eliminando la misma, la redirección funciona correctamente.

Referencias =

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

http://sourceforge.net/projects/vcxsrv/

http://x.cygwin.com/

http://sourceforge.net/projects/xming/files/Xming/6.9.0.31/

http://sourceforge.net/projects/xming/files/Xming-fonts/7.5.0.34/