sshoogr: DSL Groovy para trabajar con servidores remotos a través de SSH

sshoogr: DSL Groovy para trabajar con servidores remotos a través de SSH

Publicidad

Si trabajamos en sistemas es muy común que tengamos que hacer pequeños (y no tan pequeños) scripts para automatizar ciertas tareas, conectarnos por ssh a servidores, copiar archivos, ejecutar comandos remotos,... Existen algunas herramientas para realizar estas tareas, pero ¿qué os parecería aprovecharnos de todas las ventajas que nos proporciona Groovy para hacer esto?

Sshoogr, pronunciado como sugar, es una biblioteca escrita en Groovy que proporciona un DSL para trabajar con servidores remotos por SSH. Proporciona una gran flexibilidad y numerosas opciones a la vez que tenemos acceso a todo el lenguaje Groovy y a cualquier biblioteca Java que queremos utilizar.

Primeros pasos

Tenemos dos formas de empezar a utilizar sshoorg a cual más sencilla.

Instalación

La forma más fácil y sencilla de instalar sshoorg es utilizando SDKMAN!, del que ya hemos hablado con anterioridad, así que después de instalarlo, simplemente ejecutamos:

$ sdk install sshoogr

A continuación escribimos este pequeño script Groovy:

remoteSession('ivan:password@localhost') {
  exec 'ls -l'
}

Y lo ejecutamos:

$ sshoogr test1.groovy
>>> Connecting to localhost
> ls -l
total 124328
drwxr-xr-x  2 ivan ivan      4096 May 19 15:32 bin
...
...

<<< Disconnected from localhost

Si obteneis el error reject HostKey: localhost lo único que teneis que hacer es añadir al script anterior trustUnknownHosts = true justo antes de la closure remoteSession.

La ventaja de esa forma de instalar y utilizar sshoorg es que tenemos acceso completo al DSL sin necesidad de saber cómo funciona y realmente.

¿Y sin instalarlo?: Uso como biblioteca

La otra alternativa posible es utilizarlo directamente como biblioteca Groovy. Con esta opción no podremos aprovechar completamente el DSL pero no tendremos que instalar absolutamente nada, simplemente añadir la dependencia:

@Grab('com.aestasit.infrastructure.sshoogr:sshoogr:0.9.25')
@Grab('commons-codec:commons-codec:1.10')
import static com.aestasit.infrastructure.ssh.DefaultSsh.*

trustUnknownHosts = true
remoteSession('ivan:password@localhost') {
  exec 'ls -l'
}

En este caso vemos que el código es muy similar al anterior pero tenemos que añadir manualmente las dependencias y el import.

Sacando partido a sshoogr

Como hemos visto en ambas opciones es muy fácil y rápido empezar a utilizar sshoorg. Ahora vamos a ver algunas otras cosas que podemos hacer:

  • Crear archivos remotos: Una opción muy útil, por ejemplo para crear archivos de propiedades con la configuración específica de un entorno concreto:
remoteFile('/tmp/file.properties').text = "enabled=true"
  • Subir un archivo: Si en lugar de crearlo en remoto simplemente queremos subir un archivo ya existente:
  scp {
    from { localFile '/home/ivan/mi-archivo.txt' }
    into { remoteFile '/tmp/test.txt' }
  }
  • Hacer un tunel ssh: En algunas ocasiones no podemos acceder directamente a la máquina destino sino que debemos hacer un salto intermedio en otra máquina. Con sshoogr tenemos distintas opciones para realizar tunnelling ssh.

  • Opciones avanzadas: Por si todo lo anterior no fuera suficiente también tenemos la posibilidad de configurar muchas opciones: usuario, password y puertos por defecto, activar el modo verboso para ver más información de debug, activar o desactivar el comando que se ejecuta, la salida del comando, tiempos de espera,...

Entrevista a Andrey Adamovich, creador de sshoogr

sshoogr fue creado de la frustación de utilizar tareas Ant ssh y scp en scripts de Gradle.

Hemos aprovechado la ocasión para hacer una pequeña entrevista a Andrey Adamovich, creador de sshoogr:

Andrey Adamovich

¿De dónde viene el extraño nombre?

El nombre sshoogr viene de una combinación de SSH y GROOvy. Estaba jugando con las letras y encontré la combinación SSH-OO-GR la más interesante de todas. SSH primero, GRoovy segundo :)

¿Por qué creaste sshoogr?

sshoogr fue creado de la frustación de utilizar tareas Ant ssh y scp en scripts de Gradle. Teníamos automatizada la administración remota y el deployment a través de tareas con SSH. La opción de Ant y Gradle no parecía la mejor solución a largo plazo por la cantidad de código de script a mantener.

¿Probaste alguna otra herramienta alternativa??

Cuando cree sshoogr no había muchas alternativas para ejecutar comandos shell remotos que se integrasen adecuadamente con las herramientas y los conocimientos que tenía el equipo: principalmente Java, Groovy y Gradle. Existían alternativas en Python como Fabric y también estaba Capistrano en el mundo de Ruby. Pero aprender esas herramientas era pedir demasiado a nuestro equipo que principalmente conocía Java. Actualmente existen algunas herramientas como gradle-ssh y overthere (licenciado como GPL). También Ansible es bastante popular como herramienta de ejecución remota de scripts, pero no es muy Windows-friendly (yo tengo una máquina con Windows).

¿Tienes planes para el futuro: añadir nuevas características,...?

Tengo muchas ideas sobre como mejorar sshoorg pero el tiempo libre siempre es la mayor limitación :). Con suerte podré empezar a añadir nuevas opciones como local-protocol y controlar la introducción del password de sudo durante el verano.

Bonus: Charla sobre sshoogr de Andrey

Y para finalizar, si quereis conocer de primera mano sshoogr y verlo en acción, os recomiendo esta charla que dio Andrey en Greach 2016:

Más información | Sshoogr

Temas
Publicidad
Comentarios cerrados
Publicidad
Inicio

Ver más artículos

Inicio