Ampliando el post de mi compañero José Vila (@jovimon) sobre introducción a túneles SSH, os quiero mostrar otros truquillos para aquellos que usamos SSH a diario, y poder así agilizar tareas. Ya sabéis, para ser productivo hay que ser un maestro kung-fu de las herramientas que más usas ;)
Multiplexar conexiones y hacerlas persistentes aunque hayamos cerrado sesión
Muy útil si en nuestro día a día estamos entrando y saliendo en varios servidores. Aunque tengamos varias shells abiertas contra un servidor, el cliente SSH solo habrá creado una conexión y todas las consolas compartirán el mismo socket. De esta forma, sólo será necesario autenticarse la primera vez. Se creará un socket donde las siguientes conexiones a ese servidor irán multiplexadas a través de él. Por tanto, los próximos accesos serán mucho más rápidos y sin tener que introducir las credenciales de nuevo.
Para configurar esta funcionalidad, hay que editar ~/.ssh/config (si no existe, crearlo)
Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p ControlPersist 1h
Con esta configuración se creará una conexión persistente, que permanecerá activa hasta que ocurra una hora de inactividad en ese socket. Si quisiéramos crear otra conexión con diferentes parámetros que los lanzados en la primera conexión, como por ejemplo añadir la opción -X para hacer X11 forwarding, debemos matar el proceso ssh que ha quedado en segundo plano. De esta forma, desconectamos del todo la sesión multiplexada y nos volverá a pedir contraseña.
Keep Alive para evitar desconexiones
¿Os ha pasado a menudo que la conexión SSH se cae porque se ha quedado inactiva unos instantes? Probablemente el motivo es porque hay un firewall por ahí en medio que resetea la conexión si no detecta actividad en X segundos. Para evitar esto, puede configurarse el cliente SSH para que envíe un paquete dummy cada cierto tiempo.
Igualmente, en ~/.ssh/config
ServerAliveInterval 10
Simplificar conexiones
Como ya he comentado en algunas ocasiones, un administrador perezoso es un administrador eficiente. Por eso, si realizamos una tarea una y otra vez, es muy recomendable pararse y pensar si hay alguna forma de hacerla en menos tiempo. Si el acceso a un servidor SSH se hace siempre sobre el mismo usuario, y sobre un puerto que no es por defecto, se debe especificar explícitamente cada vez que se quiera conectarse. Si además son bastantes los servidores, con variedad de puertos y usuarios, acordarse de la configuración precisa para cada uno también puede ser un problema.
Por ejemplo, si para acceder a un servidor necesitamos escribir esto.
$ ssh -p 31415 operador@database.dominioextraordinariamentelargo.com
se puede simplificar por:
$ ssh bbdd
Añadiendo a ~/.ssh/config
Host bbdd Hostname database.dominioextraordinariamentelargo.com User operador Port 31415
Por supuesto, se pueden añadir tantos hosts como necesitemos.
Crear punto de montaje de un sistema de ficheros remoto con SSH
¿Cansado de usar scp una y otra vez? Con sshfs es posible crear un punto de montaje en el pc local, de un servidor remoto, usando SSH. Dependiendo de la distribución que se use, quizás sea necesario instalar el paquete sshfs. La forma de hacerlo es la siguiente:
$ sshfs usuario@servidorremoto.com:/home/usuario carpetaLocal/
Para desmontarlo:
$ fusermount -u carpetaLocal/
Fijaos que no ha sido necesario tener permisos de root para crear el punto de montaje.
Estas han sido unas pocas indicaciones que se pueden hacer con SSH para trabajar con él de forma más rápida. Pero SSH tiene muchísimo más.
¿Conocéis algún truquito más que uséis con SSH de manera habitual? ¡Compártelo con nosotros en los comentarios!
Muy buenos truquillos jchica ;)
Saludos
fikih888
Gracias Rafa \o/
Añado un par de cosillas más:
Una forma un poco menos bruta y más educada de cerrar la conexión que tiene la persistencia activada, en lugar de matar el proceso, se puede hacer:
$ ssh bbdd -O exit
(O mayúscula)
Otro tip interesante que me ha comentado @jvillalon es la de deshabilitar la resolución DNS inversa en el servidor SSH, y así evitar que tarde en responder. Hay que añadir en /etc/ssh/sshd_config:
UseDNS no
Saludos!
Habéis echado un ojo a storm? Muy útil para gestionar conexiones SSH
https://github.com/emre/storm
Muchas gracias por el post y por la mención Jose Luis, yo ya lo estoy utilizando :P
Siguiendo con el tema de los túneles, buscando un poco he encontrado las directivas para configurar túneles en el fichero de configuración. Son las siguientes:
Esta configuración:
ssh -L X:localhost:3306 172.16.1.100
Se escribiría en ~/.ssh/config como:
Host 172.16.1.100
LocalForward X:localhost:3306
Esta configuración:
ssh -R Y:localhost:Z 172.16.1.100
Se escribiría en ~/.ssh/config como:
Host 172.16.1.100
RemoteForward Y localhost:Z
Esta configuración:
ssh -D X 172.16.1.100
Se escribiría en ~/.ssh/config como:
Host 172.16.1.100
DynamicForward X
Espero que os sirva ;)
Gracias por la información, se la paso a un amigo al que le vendrá de fábula.
Saludos