VNC super seguro usando túneles SSH

Para poder exportar un display desde un host, usando VNC a través de un canal seguro SSH, lo primero que hay que hacer es precisamente correr VNC en el host, sólo en forma local (localhost).

1- Exportar display en forma local:

usuario@host_remoto:~$ vncserver -geometry 1900x1020 -localhost
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? no
New 'X' desktop is host_remoto:1
Creating default startup script /home/fernandoph/.vnc/xstartup
Starting applications specified in /home/fernandoph/.vnc/xstartup
Log file is /home/fernandoph/.vnc/tux:1.log
usuario@host_remoto:~$

Parámetros:

  • -geometry 1900×1020: es el tamaño en píxeles del display. Esto es a gusto de cada uno, ese tamaño va bien con monitores fullHD.
  • -localhost: pone en marcha el servidor VNC sólo en forma local

Salida:

  • Pedirá la clave por única vez, la cual se utilizará luego para acceder al display VNC.
  • Prestar atención a la línea que lee:
Nex 'X' desktop is host_remoto:1

En particular a :1, hay que recordar muy bien ese número ya que hay que tenerlo en cuenta para realizar la conexión segura a través de ssh. En éste caso se ha asignado :1 porque es el primer servidor VNC que se arranca pero puede pasar que hubiera más de un usuario corriendo VNC con lo cual ese número se verá incrementado.

2- Túnel SSH

Entonces ahora es el momento de realizar el túnel ssh que nos permitirá acceder de forma segura al servidor vnc, desde nuestro host local, ejecutamos:

$ ssh -C -f usuario@host_remoto -L 5900:localhost:5901 -N

El análisis de los parámetros los dejo a su curiosidad si les interesa pues sería meternos en temas que no vienen al caso ahora, a lo único que hay prestar atención es a un solo número de toda esa línea de comando, el 5901. En el paso anterior pedí recordar el :1, bien, el 5901 es 5900 (puerto default para vnc) más ese :1. Entonces si por ejemplo vnc asignara :7 (porque hay otros 6 usuarios exportando sus display), entonces en vez de usar 5901 como parámetro para ssh, se deberá usar 5907.

En cuestiones de la salida del anterior comando, no hay mucho para decir: pedirá la clave ssh del usuario@host_remoto, y devolverá el prompt sin más ya que el tunnel quedará corriendo en background. Se puede utilizar usar ps aux para buscar la línea y matar el proceso cuando se desee (es destruirá el tunel, desconectando en servidor VNC)

3- Conectar al servidor VNC

Desde nuestro host local, corremos:

$ vncviewer localhost:5900

Al ejecutar este comando, se pedirá la clave de vnc que seteamos en el paso 1 y listo!, se desplegará el escritorio por defecto de host_remoto.

Algunas aclaraciones:
el comando del paso 1) puede estar corriendo en forma indefinida y no debería cerrarse a menos que: se reinicie host_remoto, se mate manualmente el proceso o se cierre el export del display haciendo (en host_remoto):

$ vncserver -kill :1

Recordar reemplazar el :1 con el número de display que haya sido asignado en el paso 1.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *