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 ;-)
If you liked this post, you can donate using Bitcoin 12jVrWkk5S6x5hEizThZwgTx59KxaDdK4C