Túnels i ssh: ProxyCommand

Es tracta d’una cosa ben senzilla però que sempre m’havia portat problemes. Fins ara utilitzava ssl -L, però finalment n’he trobat una solució ben senzilla i còmode, i la poso aquí per si a algú li pot ser útil.

La situació és la següent: ens volem connectar per ssh a un servidor situat dins d’una xarxa remota (e.g., internal.example.net), i aquest servidor no accepta connexions directes des d’internet, sinó que per arribar-hi cal connectar-se primer a un servidor intermig que serveix d’entrada a la xarxa (e.g., gateway.example.net). Doncs la solució és ben senzilla: es pot utilitzar la comanda netcat, nc, junt amb ProxyCommand dins l’arxiu ~/.ssh/config, i així es permet la connexió directe a internal.example.net a través del proxy gateway.example.net.

Per configurar-ho així cal fer el següent. Obra l’arxiu ~/.ssh/config amb el teu editor de texts preferit,

$ vim ~/.ssh/config

i escriu-hi això:

Host internal.example.net internal
  User          lblisset
  HostName      internal.example.net
  ProxyCommand  ssh lblisset@gateway.example.net nc %h %p 2> /dev/null

I ja està. Ara us podeu connectar directament a internal.example.net escrivint simplement $ ssh internal.example.net o $ ssh internal. I les comandes scp i rsync també funcionen com si poguéssim veure directament internal.example.net. Fàcil! Per saber-ne més, $ man 5 ssh_config.

Res més, us deixo una altra eina que us pot ser útil per a túnels ssh amb el Mac OS X: tunnelopen.