Accedint al nostre PC per SSH quan no podem tocar els ports del router
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 ;-)

3 comentarios
hace 1 año y 7 meses
Fa res vaig escriure un article igual! encara que el meu script era molt menys elaborat ;-) prenc nota del teu script d'init.
hace 1 año y 7 meses
@Edu: no és gran cosa l'script, sobretot la part d'agafar el pid segur que es pot fer més neta... jeje
hace 1 año y 7 meses
jejejje
ta currao... sobretodo porque es lo tipico a lo que yo no le prestaria atención si tubiera ese problema ;)
Escribir un comentario
Si quieres añadir tu comentario a esta entrada, simplemente rellena el siguiente formulario:
* Campos requeridos
Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>.
No hay trackbacks
Para notificar de una mención en tu blog a esta entrada, habilita la notificación automática (Opciones > Discusión en WordPress) o especifica esta url de trackback: http://blog.tenak.net/go/174/trackback/