Agilizando SSH

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!

Comments

  1. Muy buenos truquillos jchica ;)

    Saludos
    fikih888

  2. 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!

  3. Habéis echado un ojo a storm? Muy útil para gestionar conexiones SSH

    https://github.com/emre/storm

  4. 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 ;)

  5. Gracias por la información, se la paso a un amigo al que le vendrá de fábula.
    Saludos