
Pasando a través de un firewall
Con esto se puede conectar automáticamente un servidor (1) detrás de un cortafuego a un servidor externo (2) en internet y desde el servidor externo (2) acceder a la consola del servidor (1)
Para que funcione se necesita de 3 ordenadores:
server 1: está detrás de un cortafuego
server 2: tiene una IP pública y se puede acceder por ssh
client: es un ordenador de casa conectado a internet por wifi/cable/4g…
Antes de emezar nos aseguramos con el Server 1 pueda entrar en el server 2 por ssh sin contraseña utilizando la clave pública. Si no puede hacerlo mira este articulo:
https://www.preparandonos.es/?p=313
En el servidor 1 (detrás del cortafuego) vamos a crear este servicio y instalar autossh
apt install autossh
creamos el servicio
mcedit /etc/systemd/system/autossh-ssh-tunnel.service
la puerta 16789 puede cambiar en cualquier número comprendido entre 1025 y 65535 y que no sea ocupado por otro servicio, como por ejemplo 1935/3565/8080/9000/10000….
[Unit]
Description=AutoSSH tunnel service on local port 16789
After=network.target
[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR 16789:localhost:22 root@210.199.15.61
[Install]
WantedBy=multi-user.target
donde 210.199.15.61
es la IP pública del servidor 2 (tu pon la IP que corresponda) o su dominio si tiene IP dinámica. (acuérdate de ddclient en el server 2)
ahora instala y lanza el servicio con
systemctl enable autossh-ssh-tunnel.service
systemctl start autossh-ssh-tunnel.service
Cliente
luego desde el Client (el de casa) entramos en el Server 2 por ssh y una vez dentro le damos:
ssh root@127.0.0.1 -p 16789
Nos pide la contraseña del Server 1 … y ya estamos dentro y pasando a través del firewall (cortafuego)!
Acuérdate que si en el server 1 está deshabilitado el acceso de root por ssh, no podrás entrar, así que… o lo tienes activado, o usa otro usuario donde te habrás asegurado que pueda entrar por ssh al server 2 sin contraseña, usando el certificado ssl
NOTA: si en el servidor usas un puerto diferente del 22, (por ejemplo el 2222) entonces hay que modificar un poco el servicio, en:
[Unit]
Description=AutoSSH tunnel service on local port 16789
After=network.target
[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR 16789:localhost:2222 root@210.199.15.61 -p 2222
[Install]
WantedBy=multi-user.target