Por marcos, hace 1 año y 7 meses

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:

  1. #!/bin/bash

  2. CMD="ssh -nNT -R 2222:localhost:22 user@server"

  3. case "$1" in
  4. start)
  5. `${CMD} ` &
  6. pid=`ps aux | grep "${CMD}" | cut -d ' ' -f 7 | head -n 1`
  7. echo $pid > /var/run/reversetunnel.pid
  8. ;;
  9. stop)
  10. kill -15 `cat /var/run/reversetunnel.pid`
  11. ;;
  12. *)
  13. echo "Available options: start, stop."
  14. ;;
  15. 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:

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

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

  1. $ ssh user@servidor
  2. $ 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

Gravatar #1. Edu
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.

Gravatar #2. marcos
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

Gravatar #3. angel
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/