Installation d'un logiciel d'automatisation de tâche serveurs Rundeck

Un outils que beaucoup de gens connaissent c'est crond, il vous permet d'automatiser des tâches sous Linux , mais vous pouvez rencontrer certain problème le suivit de vos tâches par exemple.
En effet, il est facile de suivre un serveur, mais quand vous devez suivre plus 300 tâches sur une multitude de serveurs, cela peut être un travail fastidieux.
RunDeck est un outil d’automatisation de tâches open source, livré avec un cli et une interface web qui vous simplifie la gestion de tâches serveur.

Voici, les caractéristique du logiciel Rundeck :

Je vais vous montrer comment mettre en place ce logiciel sous Debian.

Installation des dépendances

Comme Rundeck est développer en java, il vous faudra forcement l'environnement Java.
La dernière version 2.10 étant compatible avec java 8, il vous faudra installer cette version.
Pour debian 9 “strecth”, pas de problème :

apt-get install openjdk-8-jdk
Pour ceux qui n'auraient pas upgrade et qui seraient toujours en debian 8 “jessie”, il vous faudra activer les backports:
Éditer votre fichier “sources.list” :
vim  /etc/apt/sources.list

Puis, ajoutez la ligne suivante:

 deb http://ftp.fr.debian.org/debian jessie-backports main

Mettre à jours les dépôts de votre serveur :

apt-get update

Vous pouvez installer l'environnement java 8:

apt-get install open-jdk-8-jdk

Installation de rundeck

Nous allons ajouter le dépôt dans notre serveur :

apt-get install dirmngr
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 379CE192D401AB61
echo "deb http://rundeck.bintray.com/rundeck-deb /" > /etc/apt/sources.list.d/pkg_rundeck.list

Mettre à jours les dépôts de votre serveur :

apt-get update

Puis l’installation de Rundeck:

apt-get install rundeck rundeck-cli 

Il faut savoir que Rundeck est fourni avec une base embarquée, mais je vous recommande d'installer un gestionnaire de base de données, cela simplifiera vos sauvegarde, réplique de données, etc.
Dans cette article, j'ai choisis MariaDB/MySQL, vous pouvez choisir un autre SGBD, rundeck fournit une documentation pour ceux qui utiliserai un autre SGBD (comme par exemple postgresql).
Il y a une particularité pour MariaDB il vous faudra la version 10.2.
Voici, l'installation avec Debian 9, sur le lien vous pourrez retrouver une documentation sur d'ancienne version de debian ou autres d'ailleurs.
Prérequis, mise en place du dépôts :

apt-get install software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64] http://fr.mirror.babylon.network/mariadb/repo/10.2/debian stretch main'

Mettez à jours vos dépôts :

apt-get update

Maintenant, l'installation :

apt-get install mariadb-server
Si vous obtenez cette erreur ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded.
J'ai obtenu cette erreur suite à une migration partielle de la base MariaDB.
Voici, comment je l'ai résolu:
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot

Restauration d'une méthode de mot de passe normal et fonctionnel :

update user set plugin="mysql_native_password";

Puis, sortez de MariaDB:

quit;

Et redémarrez MariaDB :

/etc/init.d/mysql stop
kill -9 $(pgrep mysql)
/etc/init.d/mysql start

Puis, dans MariaDB, nous allons créer la base :

mysql -u root -p
MariaDB [(none)]> create database rundeck;

Nous allons accorder l'accès à un nouveau login et spécifier le nom d'hôte à partir duquel le serveur (dans mon cas localhost) Rundeck se connectera.

 grant ALL on rundeck.* to 'rundeckuser'@'localhost' identified by 'PASSWORD';

Configuration de Rundeck

Vous devez maintenant configurer Rundeck pour vous connecter à cette base de données, comme décrit précédemment.
Mettez à jour le fichier rundeck-config.properties :

dataSource.url = jdbc:mysql://localhost/rundeck?autoReconnect=true
dataSource.username=rundeckuser
dataSource.password=PASSWORD
dataSource.driverClassName=com.mysql.jdbc.Driver

Vous pouvez modifier l'option grails.serverURL du fichier rundeck-config.properties pour que l'interface web réponde :

grails.serverURL=http://rundeck.ksh-linux.info:4440

Mettez le service rundeckd au démarrage de votre distribution:

update-rc.d rundeckd defaults

Connectez-vous sur le lien renseigné dans l'option grails.serverURL et voila ça devrai fonctionné, dans mon cas http://rundeck.ksh-linux.info:4440
Pour le login/mot de passe c'est admin, pour changer, voir ajouter des utilisateurs.
Regarder le fichier realm.properties.
Vous avez le choix vous pouvez laisser en claire le mot de passe dans le ficheir ou faire ce qui suit pour avec un hash :
Génération du hash:

java -cp /var/lib/rundeck/bootstrap/jetty-all-9.0.7.v20131107.jar  org.eclipse.jetty.util.security.Password admin PASSWORD

Voici, le résultat :

PASSWORD
OBF:1iff1i7i1l6r1mrf1mrn1l6j1i8g1ier
MD5:319f4d26e3c536b5dd871bb2c52e3178
CRYPT:adagMaydjUEBg

Choisissez un des hashs et ajoutez le dans le fichier realm.properties comme cela :

admin: MD5:319f4d26e3c536b5dd871bb2c52e3178,user,admin,architect,deploy,build

Nous venons de changer le mot de passe du login admin.
Vous pouvez interfacer rundeck avec un annuaire LDAP/Active directory, la doc est claire et bien faite

Il y a aussi la possibilité de mettre en place des ACL, la documentation rundeck est plutôt bien faite

Comment améliorer cela

Il est possible d'activer la partie SSL de rundeck, j'ai préférer décharger le traitement de la connexion SSL en utilisant un proxy SSL apache2.

Configuration de rundeck

Modifiez le fichier rundeck-config.properties :

grails.serverURL=http://127.0.0.1:4440

Modifiez le fichier profile en particulier la ligne commençant par RDECK_JVM, il faut que ça ressemble à cela (surtout la fin) :

RDECK_JVM="-Djava.security.auth.login.config=$JAAS_CONF \
         -Dloginmodule.name=$LOGIN_MODULE \
         -Drdeck.config=$RDECK_CONFIG \
         -Drundeck.server.configDir=$RDECK_SERVER_CONFIG \
         -Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \
         -Drundeck.server.serverDir=$RDECK_INSTALL \
         -Drdeck.projects=$RDECK_PROJECTS \
         -Drdeck.runlogs=$RUNDECK_LOGDIR \
         -Drundeck.config.location=$RDECK_CONFIG_FILE \
         -Djava.io.tmpdir=$RUNDECK_TEMPDIR \
         -Drundeck.server.workDir=$RUNDECK_WORKDIR \
         -Dserver.http.port=$RDECK_HTTP_PORT \
         -Dserver.http.host=127.0.0.1"

Installation du serveur web:

apt-get install apache2 openssl

Activation des modules proxy, proxy_http, rewrite et ssl :

a2enmod proxy
a2enmod proxy_http
a2enmod ssl
a2enmod rewrite

Il vous faudra créer votre hôte virtuel, pour cela nous allons éditer un fichier de configuration dans le répertoire /etc/apache2/sites-available, je l'appel rundeck.conf ::

<VirtualHost *:80>
      Servername rundeck.ksh-linux.info

      ProxyRequests Off
      proxyPreserveHost On

      ProxyPass / http://127.0.0.1:4440/
      ProxyPassReverse / http://127.0.0.1:4440/

      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}/ [END,QSA,R=301]
      <proxy "*">
              Order deny,allow
              Allow from all
      </proxy>
      LogLevel warn
      ErrorLog ${APACHE_LOG_DIR}/rundeck.bilendi.net-error.log
      CustomLog ${APACHE_LOG_DIR}/rundeck.bilendi.net-access.log combined
</VirtualHost>

Puis, la partie SSL:
Je donne l'étape de création d'un certificat auto-signé, mais vous pouvez utiliser aussi let's encrypt :

openssl genrsa -out privkey.pem 2048
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

Il faudra créer un nouvel hôte virtuel dans /etc/apache2/sites-available, je l'appel rundeck-ssl.conf :

<VirtualHost *:443>
      Servername rundeck.ksh-linux.info

      ProxyRequests Off
      proxyPreserveHost On

      ProxyPass / http://127.0.0.1:4440/
      ProxyPassReverse / http://127.0.0.1:4440/
      <proxy "*">
              Order deny,allow
              Allow from all
      </proxy>
      SSLEngine on
      SSLCertificateFile      /chemin/vers/votre/cacert.pem
      SSLCertificateKeyFile   /chemin/vers/votre/privkey.pem

      LogLevel warn
      ErrorLog ${APACHE_LOG_DIR}/rundeck.bilendi.net-error.log
      CustomLog ${APACHE_LOG_DIR}/rundeck.bilendi.net-access.log combined
</VirtualHost>

Activez vos hôtes virtuels :

a2ensite rundeck.conf
a2ensite rundeck-ssl.conf

Redémarrer les services:

 /etc/init.d/rundeckd restart
/etc/init.d/apache2 restart

Et voila vous pouvez vous connecter à votre rundeck, dans mon cas https://rundeck.ksh-linux.info

Des questions/commentaires n’hésite pas