TiddlyBlog de leoperbo

Esta es la versión simplificada de una sección del blog, optimizada para una carga rápida y compatibilidad con motores de búsqueda, por lo que faltan algunas funciones. Para disfrutar de la experiencia completa visita la versión wiki de esta página.

Acceso remoto a Ubuntu vía SSH y VNC

22 marzo 2015 a las 23:06

Objetivo: controlar una máquina con Ubuntu a través de ssh/vnc con distintos niveles de acceso, distintos canales de visualización y seguridad elevada con claves públicas/privadas.

Esto funcionará únicamente luego de configurar la máquina anfitrión. Sustituye siempre [usuario] y xx con los valores que apliquen en tu caso:

  • Comando desde la misma red local:
    ssh -L 5901:localhost:5901 [usuario]@192.168.1.xx -p xx
  • Comando desde fuera de la red local (requiere que el anfitrión esté conectado a un ruteador que permita la salida vnc por IP global), la dirección IP es variable:
    ssh -L 5901:localhost:5901 [usuario]@IPGLOBAL -p xx
    

Con base en lo anterior, generé el siguiente script que automatiza la elección de la dirección a la cuál conectarse:

#!/bin/bash

#Script que automatiza la elección de métodos de conexión a un servidor
#casero comparando su IP con la de este equipo.

GETMYWANIP=$(curl -s "http://myexternalip.com/raw")
SAVEDWANIP=$(cat ~/wanip.txt)
SCIP=$(cat ~/Sync/Consultas/ip.txt)

# Comparar el dato obtenido con el almacenado y actualizar el almacenado si
# son diferentes:
if [[ $SAVEDWANIP != $GETMYWANIP ]]; then
# Borrar la última versión del archivo donde se recibe el dato:
  rm ~/wanip.txt
# Guardar el dato obtenido en crudo:
  echo $GETMYWANIP >> ~/wanip.txt
# Mostrar mi IP actual:
  echo "La dirección IP de este equipo ahora es:" && echo $GETMYWANIP
# Mostrar la dirección del servidor casero:
  echo "La dirección IP del servidor casero es:" && echo $SCIP
else
# Mostrar la IP almacenada ya que no ha cambiado:
  echo "La dirección IP de este equipo sigue siendo:" && echo $SAVEDWANIP
# Mostrar la dirección del servidor casero:
  echo "La dirección IP del servidor casero es:" && echo $SCIP
fi
# Comparar la IP global del servidor con la de este equipo:
if [[ $SCIP = $GETMYWANIP ]]; then
# Si son iguales, conectar al servidor casero mediante IP local:
  ssh -L 5901:localhost:5901 [usuario]@192.168.1.xx -p xx
else
# Si las direcciones IP gloables del servidor y de este equipo son distintas,
# contectar a la IP global del servidor:
  ssh -L 5901:localhost:5901 [usuario]@$SCIP -p xx
fi

Y el siguiente lanzador para iniciar el script desde interfaz gráfica:

~/.local/share/applications/Servidor en casa.desktop

[Desktop Entry]
Name=Servidor en casa
Comment=Conecta al servidor doméstico vía SSH
GenericName=Servidor doméstico SSH
Exec=/home/[usuario]/.local/bin/ssh_servidor_casa
Icon=network-server
Terminal=true
StartupNotify=false
Type=Application
Categories=Network;

Para que el script funcione por primera vez es necesario:

  1. Haber configurado la sincronización entre el servidor casero y la máquina que accederá a él, mediante Syncthing
  2. Que el servidor casero ejecute periódicamente el script para Informar cambio de dirección IP.
  3. Crear el archivo ~/wanip.txt con cualquier contenido (un caracter basta) en la primera línea.