Blog

Jenkins plugins: SSH Agent

Jenkins es un software de integración continua de código abierto que se utiliza para automatizar el proceso de construcción, prueba y despliegue de software. 

Permite a los equipos de desarrollo integrar el código de manera rápida y eficiente, lo que ayuda a detectar y resolver los errores de manera temprana en el ciclo de vida del software.

A través de plugins y configuración es altamente personalizable y extensible, lo que significa que los desarrolladores pueden adaptarlo a sus necesidades específicas. Se integra con una variedad de herramientas y tecnologías, lo que facilita su uso en una amplia gama de proyectos.

Jenkins también proporciona una serie de características útiles para la gestión de proyectos, como la capacidad de programar la construcción de software en momentos específicos, y la integración con sistemas de control de versiones como Git y SVN.

En general, es una herramienta poderosa y flexible para la integración continua, que puede ayudar a los equipos de desarrollo a mejorar la calidad del software, aumentar la eficiencia y reducir los costos a largo plazo.

Los casos de uso de Jenkins, gracias a la alta personalización y configuración del servicio, pueden ser bastante diferentes. 

Existen multitud de plugins para esta herramienta, los cuales otorgan nuevas características y funcionalidades al servicio.

Hoy vamos a hablar de uno de los más utilizados “SSH Agent”.

SSH Agent

El plugin SSH Agent de Jenkins permite a los usuarios autenticarse en servidores remotos de manera segura y sin la necesidad de proporcionar credenciales cada vez que se realiza una conexión SSH. Para ello, necesita confianza RSA mediante las claves privadas que almacena en la configuración del propio plugin.

Al utilizar este plugin, no es necesario definir las credenciales de acceso cada vez que se realice una conexión SSH. De esta manera, abstrayendo los procesos (steps de pipelines, etc). de dicha información/configuración, aumenta la eficiencia y seguridad. 

Se puede configurar de manera sencilla y se integra fácilmente con otros, como el plugin Git. Una vez que se ha configurado correctamente, permite a los usuarios conectarse a servidores remotos.

Para poner un poco en contexto lo explicado y el uso de SSH Agent, vamos a hacer un ejemplo.

Ejemplo del uso de SSH Agent

En primer lugar, vamos a instalar el plugin SSH Agent. Para ello, entramos en la Administración de Plugins (Administrar Jenkins -> Administrar Plugins):

1_administrar_jenkins_0.png

Buscamos el plugin “SSH Agent” en los plugins disponibles:

2_plugin_ssh_agent.png

Seleccionamos el plugin y esperamos que se instale y reinicie el servicio de Jenkins para habilitar dicho plugin (podemos marcar la casilla resaltada para reiniciar Jenkins cuando finalice el proceso de instalación del plugin). 

3_instalacion_reinicio_plugin.png

Una vez que se ha reiniciado Jenkins, podemos comprobar la disponibilidad del plugin instalado en “Installed plugins”:

4_disponibilidad_plugin_ssh_agent.png

Cuando ya tengamos el plugin instalado, vamos a crear unas credenciales para este ejemplo. Posteriormente las utilizaremos para conectar remotamente por SSH a una instancia remota y ejecutar alguna acción/comando de prueba sobre la misma.

Para crear la primera credencial, nos dirigimos a “Administrar Jenkins -> Manage Credentials”:

5_credencial.png

Seleccionamos el almacén de credenciales donde deseamos guardar la nueva credencial:

6_almacen_credencial.png

 

7_almacen_credencial_ii.png

Y creamos la nueva credencial:

8_creacion_credencial.png

A la hora de crear la credencial, seleccionamos “SSH Username with private key” e introducimos los datos de acceso del usuario SSH: nombre de usuario y una RSA privada con la cual se establezca confianza RSA.

Como sabemos, para ello, la clave pública ha de estar añadida en el “authorized_keys” de la instancia remota para el usuario en cuestión, “jenkins” en este ejemplo:

10_usuario_jenkins.png

Una vez que tengamos la credencial creada, vamos a utilizarla en un simple pipeline y observaremos su funcionamiento.

Para ello, vamos a la “Home” o “Panel de control” y seleccionamos “Nueva Tarea”.

11_nueva_tarea.png

La tarea/pipeline que vamos a crear, no tiene ningún propósito más que la comprobación del uso de SSH Agent. No realizaremos acciones reales de integración ni despliegues, simplemente alguna ejecución remota con SSH.

En este caso, la instancia remota a la que queremos conectar tendrá la IP 10.20.30.211. Nosotros conectaremos desde otra IP, la IP del contenedor de Docker donde está corriendo el servicio de Jenkins (Esta instancia tiene el servicio SSH expuesto en el puerto 21122, no en el 22, se reflejará en la conexión ssh que realicemos más adelante)

En el pipeline, realizaremos unas simples acciones:
1) Ejecutaremos el comando: “uname -a” de manera local en el propio Jenkins.
2) Ejecutaremos el mismo comando “uname -a” en la instancia remota 10.20.30.211.

Realizando este sencillo pipeline, podemos observar cómo se realiza la conexión SSH y cómo la ejecución de los comandos devuelve resultados distintos al ser ejecutados en distintas instancias.

Dicho esto, creamos la tarea.

Para la prueba que vamos a hacer, seleccionaremos “Crear un proyecto de estilo libre”.

12_crear_proyecto_estilo_libre.png

Para la prueba, solo necesitamos configurar 2 cosas (lo más importante para la explicación): añadir la credencial del usuario Jenkins que hemos creado al entorno de ejecución del pipeline y la ejecución de los comandos descritos anteriormente.

Seleccionamos la o las credenciales a utilizar:

13_credenciales_utilizar.png

Una vez seleccionada la/las claves de acceso, configuramos un simple “Build step” para la ejecución de comandos anteriormente descrita. Para ello, añadimos un nuevo paso de tipo “Ejecutar en línea de comandos (shell)”.

14_ejecutar_linea_comandos_shell.png

Y añadimos los comandos para las pruebas dentro de la ejecución shell:

15_comandos_pruebas.png

Si nos fijamos, no hemos indicado usuario ni contraseña para la conexión SSH. El plugin SSH Agent, se encargará de utilizar la o las claves SSH añadidas al entorno de ejecución para realizar la conexión.

Podríamos seleccionar varias credenciales SSH Agent, si el proceso necesita utilizar distintas credenciales a la hora de hacer conexiones SSH. El plugin se encargará de conectar con las credenciales añadidas al entorno de ejecución en orden. Si una credencial no es válida, intentará la conexión SSH con la siguiente credencial (o fallará en caso de no poder conectar con ninguna de las credenciales indicadas).

¡Ya tenemos nuestra prueba lista! Vamos a ejecutarla:

16_prueba_lista.png

Revisamos la salida de ejecución:

17_salida_ejecucion.png

Podemos observar:
1) La carga y comprobación del plugin SSH Agent.
2) La carga de la credencial indicada en el entorno de ejecución.
3) Resultados de uname -a local y remoto.

Con este simple ejemplo, hemos visto un uso básico del plugin SSH Agent para tareas que requieren ejecución de procesos en instancias remotas.

Newsletter de STR Sistemas

Suscríbete a nuestra newsletter para recibir contenido interesante del mundo DevOps y artículos escritos por nuestros técnicos

¡Usamos cookies propias y de terceros para mejorar tu experiencia en esta web! Si sigues navegando, consientes y aceptas estas cookies en tu ordenador, móvil o tablet.

Más información sobre las cookies y cómo cambiar su configuración en tu navegador aquí.

x