Muchos de los que leéis este blog usáis con frecuencia SSH para establecer conexiones a vuestras máquinas y me imagino que la gran mayoría sabrá de la existencia del fichero ~/.ssh/config de SSH. En él se pueden configurar y establecer opciones por defecto para algunas conexiones y que por lo tanto simplificarían mucho el día a día.
El ejemplo típico de estos casos es el de la necesidad de establecer un puerto diferente para la conexión SSH (por defecto, puerto 22). Así que imaginémonos que tenemos que establecer conexión con una máquina en el puerto 2222. Realizar esto implicaría pasarle unos parámetros y acordarse de hacerlo de cada vez.
shell> ssh -p 2222 db.local.net
Haciendo uso del fichero local de configuración de SSH se puede convertir esa llamada en la siguiente
shell> ssh db.local.net
Con únicamente añadir esto,
Host db.local.net Port 2222
Si te parece interesante esta opción, échale un vistazo al resto que comentaremos.
Simplificar conexión
Esta es quizás una de las opciones más comúnmente usadas en el fichero ~/.ssh/config. Simplifica con un nombre de conexión todas aquellas opciones que le debamos de pasar para tener una conexión satisfactoria. Un ejemplo,
Host database Hostname db.local.net User generic_user Port 2222 GSSAPIAuthentication no GSSAPIDelegateCredentials no IdentityFile ~/.ssh/ssh
KeepAlive en conexiones
Esta es una buena opción a emplear si al equipo al que te conectas tiene un tiempo máximo de conexión sin actividad. Es decir, si pasado un tiempo sin hacer nada, la conexión SSH se cierra, esta es tu opción.
ServerAliveInterval 10
Lo que hará, no será más que enviar cada X segundos un paquete dummy para que la conexión detecte actividad y no se cierre por el servidor.
Multiplexar conexiones y mantenerlas persistentes
Imagínate que necesitas establecer varias conexiones a un mismo equipo remoto. Cada vez que te conectas, pierdes tiempo entre que se establece la conexión y te autenticas. Para solucionarlo, SSH permite multiplexar conexiones, o lo que es lo mismo, establecer una conexión y que el resto de conexiones a ese host empleen el socket abierto por la primera para realizarse. Todo el tráfico irá por la misma conexión y el servidor únicamente tendrá una conexión presente.
Del mismo modo, la opción de crear una conexión persistente indica que aunque la sesión se cierre, quedará un proceso en segundo plano manteniendo la conexión 1 hora (en este caso) y por lo tanto el socket seguirá disponible ese tiempo.
Host firewall ControlMaster auto ControlPath ~/.ssh/server-%r@%h:%p ControlPersist 1h
Ventajas: Acceso y autenticación mucho más rápidos.
Port forwardings
Hay veces que es necesario tener en tu equipo un puerto de un equipo remoto y viceversa. SSH para hacer esto ofrece las opciones -L y -R. El problema es que establecer estas conexiones implica escribir bastante y acordarse del nombre del equipo remoto, y del puerto local y remoto. ~/.ssh/config lo puede hacer por ti.
Host 192.168.1.15 RemoteForward 8080 localhost:1030 Host 192.168.1.121 LocalForward 3306 database:3306