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

Si trabajamos en sistemas es común que debamos hacer pequeños (y no tan pequeños) scripts para mecanizar ciertas labores, conectarnos por ssh a servidores, copiar ficheros, ejecutar comandos recónditos,… Hay algunas herramientas para efectuar estas labores, mas ¿qué os parecería aprovecharnos de todas y cada una los beneficios que nos da Groovy para hacer esto?

Sshoogr, pronunciado como sugar, es una biblioteca escrita en Groovy que da un DSL para trabajar con servidores recónditos por SSH. Da una enorme flexibilidad y numerosas opciones al unísono que tenemos acceso a todo el lenguaje Groovy y a cualquier biblioteca Java que deseamos emplear.

Primeros pasos

Tenemos 2 formas de comenzar a usar sshoorg a como más fácil.

Instalación

La manera más simple y fácil de instalar sshoorg es usando SDKMAN!, del que ya hemos hablado de antemano, conque tras instalarlo, sencillamente ejecutamos:

dólares americanos sdk install sshoogr

Ahora escribimos este pequeño script Groovy:

remoteSession('ivan:password@localhost') undefined

Y lo ejecutamos:

dólares americanos sshoogr test1.groovy
>>> Connecting to localhost
> ls -l
total ciento veinticuatro mil trescientos veintiocho
drwxr-xr-x dos ivan ivan cuatro mil noventa y seis May diecinueve 15:32 bin

Si obteneis el fallo reject HostKey: localhost lo único que teneis que hacer es agregar al script precedente trustUnknownHosts = true inmediatamente antes de la closure remoteSession.

El beneficio de esa forma de instalar y usar sshoorg es que tenemos acceso completo al DSL sin precisar saber de qué manera marcha y verdaderamente.

¿Y sin instalarlo?: Empleo como biblioteca

La otra opción alternativa posible es usarlo de forma directa como biblioteca Groovy. Con esta alternativa no vamos a poder aprovechar absolutamente el DSL mas no deberemos instalar nada, sencillamente agregar 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') undefined

En un caso así vemos que el código es muy afín al precedente mas debemos incorporar manualmente las dependencias y el import.

Sacando partido a sshoogr

Como hemos visto en las dos opciones es muy simple y veloz comenzar a usar sshoorg. Ahora veremos otras cosas que podemos hacer:

Crear ficheros remotos: Una alternativa realmente útil, por servirnos de un ejemplo para crear ficheros de propiedades con la configuración concreta de un ambiente concreto:
remoteFile('/tmp/file.properties').text = enabled=true

Subir un archivo: Si en vez de crearlo en recóndito sencillamente deseamos subir un fichero ya existente:
scp undefined

Hacer un túnel ssh: En ciertas ocasiones no podemos acceder de forma directa a la máquina destino sino debemos hacer un salto intermedio en otra máquina. Con sshoogr tenemos diferentes opciones para efectuar tunnelling ssh.
Opciones avanzadas: Por si acaso todo lo precedente no fuese suficiente asimismo tenemos la posibilidad de configurar muchas opciones: usuario, contraseña y puertos por defecto, activar el modo perfecto verboso para poder ver más información de debug, activar o bien desactivar el comando que se ejecuta, la salida del comando, tiempos de espera,…

Entrevista a Andrey Adamovich, autor de sshoogr

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

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

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

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

¿Por qué razón creaste sshoogr?

sshoogr fue creado de la frustación de usar labores Ant ssh y scp en scripts de Gradle. Teníamos automatizada la administración recóndita y el deployment mediante labores con SSH. La opción de Ant y Gradle no parecía la mejor solución en un largo plazo por la cantidad de código de script a sostener.

¿Probaste alguna otra herramienta opción alternativa??

Cuando cree sshoogr no había muchas opciones alternativas para ejecutar comandos shell recónditos que se integraran apropiadamente con las herramientas y los conocimientos que tenía el equipo: eminentemente Java, Groovy y Gradle. Existían opciones alternativas en Python como Fabric y asimismo estaba Capistrano en el planeta de Ruby. Mas aprender esas herramientas era solicitar demasiado a nuestro equipo que primordialmente conocía Java. Hoy día hay algunas herramientas como gradle-ssh y overthere (diplomado como GPL). Asimismo Ansible es bastante popular como herramienta de ejecución recóndita de scripts, mas no es muy Windows-friendly ( tengo una máquina con Windows).

¿Tienes planes para el futuro: incorporar nuevas peculiaridades,…?

Tengo muchas ideas sobre como progresar sshoorg mas el tiempo libre siempre y en todo momento es la mayor restricción :). Con suerte voy a poder comenzar a agregar nuevas opciones como local-protocol y supervisar la introducción del contraseña de sudo a lo largo del verano.

Bonus: Charla sobre sshoogr de Andrey

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

Más información | Sshoogr

Compartir sshoogr: DSL Groovy para trabajar con servidores recónditos mediante SSH