VNC Invers

Des de hace tiempo, donde trabajo, se da soporte a usuarios que poseen un portátil de la empresa. Es indispensable poder conectarse a ellos, por ejemplo por VNC. Aquí es cuando se nos plantea el inconveniente de que pueden estar detrás de un router o firewall o a saber que, al que no tenemos acceso ninguno porque no controlamos nosotros. Por eso os voy a enseñar como se puede montar un servidor VNC en un GNU/Linux que se conecte fácilmente a un equipo que este a la escucha para recibir conexiones entrantes, en el caso, mi máquina en la oficina.

Primero tendremos que instalar el software necesario:

sudo aptitude install x11vnc tightvncserver

Y despues crear el fichero vnc.sh con este contenido

#!/bin/bash
x11vnc &
sleep 5
server=$(kdialog -inputbox "VNC Listening hostname" "equipo_remoto_escuchando")
vncconnect $server
kdialog --msgbox "Acepte para finalizar la conexión"
killall -9 x11vnc

Y darle permisos de ejecución:

chmod +x vnc.sh

Este script requiere kdialogc y no es una connexión cifrada como la del Tunnel SSH

Tunnel SSH

A veces necessitamos dar soporte a usuarios que se encuentras por el mundo conectados desde un hotel, o cualquier otro sitio, detrás de un router que no podemos controlar. Por eso, y a partir de un script d Suki_ escribimos esta pequeña herramienta para conectarse por SSH o VNC.

#!/bin/bash
# Script para hacer tunel ssh inverso
# Por David Martín :: Suki_ ::
# http://sukiweb.net
# modificado por Cristòfol Torrens :: piffall ::
# http://sangfreda.es

USUARIO_TUNEL=”remoto”
CLIENTE_REMOTO=”IP_SERVIDOR_REMOTO”
PUERTO_CLIENTE_REMOTO=”PUERTO_SSH_SERVIDOR_REMOTO” # p.ej 22555
VNC_CHECK=(’netstat -putan 2>/dev/null | grep :5900 | grep LISTEN’)
SSH_CHECK=(’netstat -putan 2>/dev/null | grep :::22 | grep LISTEN’)

if [ -n “$VNC_CHECK” ];
  then
    VAR=$VAR” a Conexión_via_VNC”;
fi
if [ -n “$SSH_CHECK” ];
  then
    VAR=$VAR” b Conexión_via_SSH”;
fi
choice=$(kdialog –menu “Selecciona el tipo de conexión remota” $VAR)

TUNELSSH=”ssh -C -p $PUERTO_SERVIDOR_REMOTO -l $USUARIO_TUNEL -R \
22222:localhost:22 -N $SERVIDOR_REMOTO”
TUNELVNC=”ssh -C -p $PUERTO_SERVIDOR_REMOTO -l $USUARIO_TUNEL -R \
59100:localhost:5900 -N $SERVIDOR_REMOTO”

case $choice in a)
  TEXTO=”echo ‘Conectando via VNC. Por favor, introduzca el password quando se \
le solicite…
  Si cierra esta ventana se terminara la conexión’”
  xterm -title “Administración Remota” -e “$TEXTO;$TUNELVNC”
esac
case $choice in b)
  TEXTO=”echo ‘Conectando via SSH. Por favor, introduzca el password quando se \
le solicite…
  Si cierra esta ventana se terminara la conexión’”
  xterm -title “Administración Remota” -e “$TEXTO;$TUNELSSH”
esac