Ara al pis de Girona, encara no tinc ADSL i faig servir una prestada, de la que no puc tocar els ports del router per fer el PC accessible des de fora. Com que tinc un servidor a casa dels meus pares encés 24/7, el faré servir de passarel.la. Això no serà suficient, doncs encara no tenim el port de la interfície ADSL del router del veí apuntant al nostre PC. La solució està en els túnels inversos que ens proporciona SSH. El que farem serà, un cop s'encén el PC del pis (el que està amb aquesta ADSL intocable) és connectar-nos al servidor de casa dels meus pares via SSH de manera que deixi aquesta connexió escoltant al servidor a un port que coneixem. Aquest port estarà redirigit (per dins la connexió SSH que hem iniciat des del PC del pis) al port 22 del PC del pis. Tot això es redueix a aquesta comanda: ssh -nNT -R 2222:localhost:22 usuari@servidor El que fa mandra, és executar això cada cop. La solució és crear un script d'inici per tal que ho faci per nosaltres:

#!/bin/bash
 
CMD="ssh -nNT -R 2222:localhost:22 user@server"
case "$1" in
        start)
                `${CMD}` &
                pid=`ps aux | grep "${CMD}" | cut -d ' ' -f 7 | head -n 1`
                echo $pid > /var/run/reversetunnel.pid
                ;;
        stop)
                kill -15 `cat /var/run/reversetunnel.pid`
                ;;
        *)
                echo "Available options: start, stop."
                ;;
esac

I per evitar que ens demani la contrassenya de l'usuari, crearem un parell de claus RSA per l'usuari root (que és qui llençarà l'script d'inici) i copiarem la clau pública al servidor:

# ssh-key-gen
# ssh-copy-id -i .ssh/id_rsa.pub user@servidor

Ara, quan ens volguem connectar al PC del pis, fariem

$ ssh user@servidor 
$ ssh user@localhost -p 2222

I ens connectariem per SSH al PC de casa. Fent això, podeu tenir un problemilla amb la identificació del host i el seu fingerprint. Si no heu fet mai ssh user@localhost al servidor, no veureu l'avís, però, si com jo, ho havíeu fet algun cop, us dirà que la identificació de la màquina ha canviat. Efectivament, per SSH localhost tenia un fingerprint (el bo, el del server) i ara, que feu ssh a localhost també, però realment és una altra màquina, el fingerprint no coincideix i SSH us avisa. Per solucionar-ho el que he fet ha estat esborrar .ssh/known_hosts i afegir al /etc/hosts un alias per 127.0.0.1 anomenat 'natura' que es el nom del meu PC al pis. Així, enlloc de ssh user@localhost -p 2222 fareu ssh user@natura -p 2222 i per SSH ja serà un altre host i no hi haurà conflicte de noms. Actualització: l'Eduard va escriure un article sobre el mateix tema i comenta que podem patir talls a la connexió per timeouts, ell explica com solucionar-ho ;-)

Tagged as ... No tags found!

If you liked this post, you can donate using Bitcoin 12jVrWkk5S6x5hEizThZwgTx59KxaDdK4C