Conexión al servidor Ubuntu a través de SSH externamente

25

Recientemente instalé Ubuntu Server 12.04 (Precise Pangolin) y tengo la intención de usarlo principalmente como un servidor de archivos. Soy completamente nuevo en Linux, así que esta es una curva de aprendizaje bastante grande. Ayer pude configurar PuTTY en mi máquina con Windows 7 usando un par de claves SSH para poder administrar Ubuntu Server desde mi escritorio. Esto funciona bien siempre que ambas máquinas estén en la misma red.

En el caso de mi computadora portátil ( MacBook Air ), es posible que no siempre esté en la misma red. ¿Es posible poder conectarme al servidor Ubuntu desde mi computadora portátil a través de SSH cuando está en una red diferente?

Instalé el avahi daemon para que el nombre de host del servidor se difunda en la LAN y configuré el enrutador para que siempre asigne la misma dirección IP al servidor. Aparte de eso, lo único que he instalado en el servidor es OpenSSH, donde he desactivado la autenticación de contraseña para que solo pueda conectarse usando un par de claves.

Pensé que podría hacer algo así desde la terminal de mi computadora portátil:

ssh my.external.ip.address [email protected]

Cuando intento ese comando me sale el error:

ssh: conectarse al host my.external.ip.address puerto 22: se agotó el tiempo de espera

También he intentado

ssh my.external.ip.address [email protected]

y recibo el mismo mensaje de error que antes. Eso debería darle una idea de lo que estoy tratando de hacer, pero ¿es esto posible? Y si es así, ¿cómo lo hago?

Suponiendo que puedo configurar una conexión externa a través de ssh desde mi computadora portátil, existe la posibilidad de que mi ISP cambie mi dirección IP externa, lo que interrumpiría la conexión externa. Me gustaría poder conectarme de manera robusta, es decir, si mi ISP cambia la dirección IP externa, aún podría conectarme remotamente al servidor sin tener que saber cuál es la nueva dirección IP externa.

Aesir
fuente

Respuestas:

23

En primer lugar, el comando correcto es: ssh [email protected]

Y el enrutador debe estar configurado para reenviar el puerto SSH 22 a la dirección IP local de su servidor.

Para una mayor depuración:

1) Verifique que el puerto 22 (SSH) esté abierto en su servidor y en el enrutador (reenvío de puertos).

2) Verifique que el servidor SSH se esté ejecutando en su servidor

3) Use ping, ssh -vmientras se conecta y mire /var/log/auth.logpara depurar cualquier otro problema de conexión.

1) En su enrutador: siga las instrucciones específicas del enrutador

En su servidor: sudo ufw status(a menos que use otra utilidad de configuración de firewall) o sudo iptables -L(método general, pero salida compleja)

Para abrir el puerto 22: sudo ufw allow 22

cf https://help.ubuntu.com/12.04/serverguide/firewall.html

2) Verifique que esté instalado: dpkg -l openssh-server

Verifique que se esté ejecutando: service ssh statusops aux | grep sshd

3) En el cliente de conexión:

En el servidor:

  • sudo less /var/log/auth.log

También puede verificar los registros del enrutador si es necesario.

Aquí hay un escáner de puertos en línea: https://www.grc.com/x/ne.dll?bh0bkyd2

Creo que también puedes usar herramientas como nmap u otras, pero todavía no estoy tan familiarizado con ellas.

Manejo de una dirección IP externa cambiante:

1) Obtenga una cuenta dynDNS o similar: http://dyn.com/dns/

Listas de proveedores de DNS dinámicos:

2) Otra solución es configurar un trabajo crontab, que regularmente le envía por correo su dirección IP externa o lo coloca en un servicio de almacenamiento en línea como Dropbox.

Aquí hay un script que usa un amigo mío:

    #!/bin/bash
    # Bash script to get the external IP address
    MYWANIP=$(curl http://mire.ipadsl.net | sed -nr -e 's|^.*<span class="ip">([0-9.]+)</span>.*$|\1| p')
    echo "My IP address is: $MYWANIP"

    IPold=$(cat /home/USER/Dropbox/test.txt)
    echo "Previous IP Address: $IPold"

    if [[ $IPold != $MYWANIP ]] ;
    then
      echo "New IP"
      rm /home/USER/Dropbox/test.txt
      echo $MYWANIP >> /home/USER/Dropbox/test.txt;
      echo $MYWANIP;
    else
      echo "Same IP";
    fi

    # example crontab entry:
    ## m h  dom mon dow   command
    ## */10 * * * * /home/USER/Dropbox/test_ip.sh

Enrutamiento de puertos del enrutador:

1) Primero, descubra la dirección IP local de su enrutador ejecutando:

ip route | grep default

Suele ser algo así como 192.168.xx

Formas alternativas y otras soluciones de SO:

2) Usando cualquier computadora conectada localmente al enrutador, acceda a la IP encontrada previamente, es decir, a través de http://192.168.1.1 por ejemplo. Esto debería abrir la interfaz de configuración del enrutador.

3) Los siguientes pasos varían según su enrutador. Así es como se hace en un enrutador con OpenWRT, por ejemplo:

https://newspaint.wordpress.com/2012/08/26/how-to-add-a-port-forward-using-the-web-interface-on-openwrt-10-03-1/

KIAaze
fuente
Gracias por esto, revisaré las sugerencias ahora.
Aesir
Ok, todo lo que tenía que hacer era reenviar el puerto 22 de mi enrutador al servidor y funciona, muchas gracias. ¿Hay alguna manera de resolver la segunda parte de mi pregunta sobre el hecho de que mi dirección IP externa podría cambiar? - Acabo de ver tu edición, leeré ahora.
Aesir
¿Podría explicar cómo puedo reenviar el puerto 22 de mi enrutador al servidor? Qué significa eso? ¡Gracias!
xxx222
Depende del enrutador que tenga, pero generalmente debe haber un reenvío de puertos o una página de configuración de firewall en algún lugar. Aquí le mostramos cómo hacerlo en un enrutador con OpenWRT: newspaint.wordpress.com/2012/08/26/… La mayoría de los enrutadores se pueden configurar accediendo a 192.168.1.1 o una dirección similar a 192.168.xx desde su navegador si está en la misma red que el enrutador.
KIAaze
3

Por defecto en Ubuntu (Escritorio) SSH no está instalado.

Puede instalarlo con el siguiente comando en la Terminal:

sudo apt-get install openssh-server

Debe instalar e iniciar el servicio de inmediato.

kenorb
fuente
2
+1. Esto funcionó muy bien cuando lo probé. Pude enviar ssh a la máquina Ubuntu justo después de ejecutar ese comando (para Ubuntu 14.04 (Trusty Tahr), edición de escritorio de 64 bits).
Peter Mortensen