| .gitignore | ||
| common_functions.sh | ||
| index.html | ||
| install.sh | ||
| LICENSE | ||
| node_manager.sh | ||
| README.md | ||
| rundeck.sh | ||
| setup_winrm_client.ps1 | ||
| store_winrm_password.sh | ||
| upload_server.py | ||
Rundeck Configurator Script
Script d'installation et de configuration automatique de Rundeck avec gestion complète des clients Linux (SSH) et Windows (WinRM)
📋 Description
Ce projet fournit un ensemble de scripts Bash pour automatiser l'installation, la configuration et la gestion de Rundeck sur Debian 13. Il simplifie considérablement l'ajout de clients Linux et Windows avec une gestion sécurisée des credentials et une configuration SSL/TLS complète pour WinRM.
Fonctionnalités principales
- ✅ Installation automatique de Rundeck (Java 11, PostgreSQL, configuration complète)
- ✅ Gestion de clients Linux via SSH avec authentification par clés
- ✅ Gestion de clients Windows via WinRM HTTPS avec validation SSL/TLS
- ✅ Stockage sécurisé des mots de passe dans Rundeck Key Storage
- ✅ Configuration automatique des certificats et du truststore Java
- ✅ Suppression complète des clients avec nettoyage automatique
- ✅ Interface web pour l'upload des certificats Windows
- ✅ Gestion de projets Rundeck via API REST
- ✅ Support multilingue (encodage CP850 pour caractères français Windows)
🚀 Installation rapide
Prérequis
- OS : Debian 13 (Trixie)
- Accès : Root sur le serveur Rundeck
- Réseau : Accès SSH aux clients Linux et WinRM HTTPS (port 5986) aux clients Windows
- RAM : Minimum 2 GB recommandé pour Rundeck
Installation
# Cloner le dépôt
git clone https://git.laboiteajb.fr/scotch/rundeck-configurator-script.git
cd rundeck-configurator-script
# Rendre les scripts exécutables
chmod +x *.sh
# Lancer le menu principal
./rundeck.sh
Le script vous guidera à travers :
- Installation de Rundeck
- Configuration de PostgreSQL
- Création des projets DEMO
- Génération du token API
📖 Utilisation
Menu principal
==========================================
GESTIONNAIRE RUNDECK (Debian 13)
IP: x.x.x.x
Status: Config chargée 🔐
==========================================
1) Ajouter un client Linux (SSH)
2) Ajouter un client Windows (WinRM)
3) Installer/Réparer le projet DEMO
4) Supprimer un client
5) Quitter
🐧 Configuration des clients Linux (SSH)
Sur le serveur Rundeck
- Exécutez
./rundeck.sh - Choisissez Option 1 : Ajouter un client Linux
- Sélectionnez le(s) projet(s) cible(s)
- Fournissez les informations :
- Nom du nœud (ex:
web-01) - Hostname ou IP
- Utilisateur SSH (ex:
root) - Mot de passe SSH
- Nom du nœud (ex:
Le script effectuera automatiquement :
- ✅ Génération d'une paire de clés SSH dédiée au nœud
- ✅ Copie de la clé publique sur le client via
ssh-copy-id - ✅ Stockage du mot de passe dans Rundeck Key Storage
- ✅ Ajout du nœud aux projets sélectionnés
- ✅ Test de connexion SSH
Structure créée
/var/lib/rundeck/
├── .ssh/
│ ├── id_rsa_web-01 # Clé privée (dédiée au nœud)
│ └── id_rsa_web-01.pub # Clé publique
└── secure_storage/
└── demo-linux.json # Définition du nœud
Exemple de définition de nœud Linux
{
"web-01": {
"nodename": "web-01",
"hostname": "x.x.x.x",
"username": "root",
"osFamily": "unix",
"osName": "Linux",
"tags": "linux,production",
"ssh-key-storage-path": "/var/lib/rundeck/.ssh/id_rsa_web-01",
"ssh-password-storage-path": "keys/node/web-01/ssh-password"
}
}
🪟 Configuration des clients Windows (WinRM)
Étape 1 : Configuration du client Windows
- Télécharger le script PowerShell depuis la page web :
http://<IP_RUNDECK>:8000 - Exécuter en tant qu'Administrateur :
# Clic droit > Exécuter en tant qu'Administrateur .\setup_winrm_client.ps1
Le script configure automatiquement :
- ✅ Génération d'un certificat auto-signé (5 ans)
- ✅ Création du listener WinRM HTTPS (port 5986)
- ✅ Activation de l'authentification NTLM, Basic, Negotiate, Kerberos, CredSSP
- ✅ Configuration du pare-feu Windows
- ✅ Désactivation du filtre UAC pour connexions distantes (
LocalAccountTokenFilterPolicy) - ✅ Export du certificat dans
C:\Temp\rundeck_winrm.cer
Étape 2 : Upload du certificat
- Accédez à
http://<IP_RUNDECK>:8000 - Glissez-déposez le fichier
C:\Temp\rundeck_winrm.cer - Le certificat est automatiquement :
- Converti de DER à PEM
- Importé dans le truststore Java de Rundeck
- Enregistré avec le CN extrait pour la résolution DNS
Étape 3 : Ajout du nœud dans Rundeck
- Exécutez
./rundeck.sh - Choisissez Option 2 : Ajouter un client Windows
- Sélectionnez le(s) projet(s) cible(s)
- Fournissez les informations :
- Nom du nœud (ex:
dc-01) - Hostname ou IP du serveur Windows
- Utilisateur (ex:
Administrateur,Administrator) - Mot de passe
- Port WinRM (défaut :
5986)
- Nom du nœud (ex:
Le script effectuera automatiquement :
- ✅ Détection hostname vs IP
- ✅ Ajout automatique dans
/etc/hostssi IP fournie - ✅ Extraction du CN du certificat
- ✅ Stockage du mot de passe dans Rundeck Key Storage
- ✅ Configuration de l'encodage CP850 pour les caractères français
Structure créée
/var/lib/rundeck/
├── winrm_dc-01.cer # Certificat DER original
├── winrm_dc-01.pem # Certificat PEM (utilisé par le plugin)
└── secure_storage/
└── demo-win.json # Définition du nœud
/etc/hosts
192.168.1.20 WIN-SERVER-2022 # Ajouté automatiquement si IP fournie
Exemple de définition de nœud Windows
{
"dc-01": {
"nodename": "dc-01",
"hostname": "WIN-SERVER-2022",
"username": "Administrateur",
"osFamily": "windows",
"osName": "Windows",
"tags": "windows,production",
"winrm-password-storage-path": "keys/node/dc-01/winrm-password",
"winrm-port": "5986",
"winrm-auth-type": "ntlm",
"winrm-protocol": "https",
"winrm-certpath": "/var/lib/rundeck/winrm_dc-01.pem",
"output-charset": "cp850"
}
}
Configuration du plugin WinRM
Les paramètres suivants sont configurés automatiquement au niveau du projet :
NodeExecutor:
authtype: ntlm
winrmport: 5986
winrmtransport: https
shell: powershell
nossl: false # Validation SSL activée
output_charset: cp850 # Support caractères français
retryconnection: 1
exitbehaviour: console
⚠️ Note importante : Première connexion
Comportement normal lors de l'ajout d'un nouveau client Windows :
La première connexion de Rundeck vers le client Windows peut générer un message d'erreur (généralement lié à la négociation SSL/TLS ou à l'initialisation de la session WinRM), mais la commande s'exécute quand même correctement.
Toutes les connexions suivantes vers ce même client fonctionneront normalement sans aucun message d'erreur.
Ce comportement est normal et ne nécessite aucune intervention.
🗑️ Suppression de clients
Pour supprimer un client proprement :
- Exécutez
./rundeck.sh - Choisissez Option 4 : Supprimer un client
- Sélectionnez le projet contenant le client
- Sélectionnez le nœud à supprimer
- Confirmez avec
oui
Nettoyage automatique
Pour les clients Linux :
- ✅ Suppression du fichier de ressources JSON
- ✅ Suppression des clés SSH (privée et publique)
- ✅ Suppression du mot de passe du Key Storage
- ⚠️ Action manuelle : Supprimer la clé publique de
~/.ssh/authorized_keyssur le client
Pour les clients Windows :
- ✅ Suppression du fichier de ressources JSON
- ✅ Suppression des certificats (.cer et .pem)
- ✅ Suppression du certificat du truststore Java
- ✅ Suppression du mot de passe du Key Storage
- ✅ Nettoyage de l'entrée
/etc/hosts - ⚠️ Action manuelle : Désactiver WinRM sur le client si souhaité :
Stop-Service WinRM Set-Service WinRM -StartupType Disabled
📁 Structure du projet
rundeck-configurator-script/
├── rundeck.sh # Menu principal interactif
├── install.sh # Installation de Rundeck
├── node_manager.sh # Gestion des clients (ajout/suppression)
├── common_functions.sh # Fonctions partagées et configuration
├── setup_winrm_client.ps1 # Script PowerShell pour clients Windows
├── upload_server.py # Serveur web pour upload de certificats
├── index.html # Interface web d'upload
├── store_winrm_password.sh # Stockage sécurisé des mots de passe WinRM
├── deploy.sh # Déploiement des scripts sur le serveur
└── WINRM_HTTPS_SETUP.md # Documentation détaillée WinRM
Fichiers de configuration sur le serveur
/root/
├── rundeck_manager.conf # Configuration persistante (token API, IP)
└── rundeck_token.tmp # Token API temporaire (session)
/var/lib/rundeck/
├── secure_storage/ # Stockage des définitions de nœuds
│ ├── demo-linux.json
│ └── demo-win.json
├── .ssh/ # Clés SSH pour clients Linux
├── winrm_*.cer # Certificats Windows (DER)
├── winrm_*.pem # Certificats Windows (PEM)
└── libext/ # Plugins Rundeck
└── py-winrm-plugin-2.1.3.zip
🔧 Configuration avancée
Encodage Windows (CP850 vs CP1252)
Le script utilise CP850 (code page DOS français) pour décoder correctement les caractères accentués dans les sorties de commandes Windows :
- CP850 : Console Windows (cmd.exe, PowerShell en mode console) ✅
- CP1252 : Applications GUI Windows (Notepad, etc.)
- UTF-8 : Standard moderne (pas toujours supporté en console)
Exemple de sortie avec le bon encodage :
Configuration IP de Windows
Carte Ethernet Ethernet :
Suffixe DNS propre à la connexion. . . :
Adresse IPv4. . . . . . . . . . . . . .: 192.168.x.x
Masque de sous-réseau. . . . . . . . . : 255.255.255.0
Passerelle par défaut. . . . . . . . . : 192.168.x.x
Authentification WinRM
Le plugin supporte plusieurs méthodes d'authentification :
- NTLM : Utilisé par défaut (authentification Windows native)
- Basic : Authentification simple (nécessite HTTPS)
- Negotiate : Kerberos ou NTLM selon le contexte
- Kerberos : Authentification domaine Active Directory
- CredSSP : Délégation de credentials
Validation SSL/TLS
La configuration par défaut utilise nossl=false pour activer la validation SSL :
- Certificat converti automatiquement de DER à PEM
- Importation dans le truststore Java (
cacerts) - Résolution DNS via
/etc/hostsou hostname réel - Vérification du CN du certificat
🐛 Dépannage
Problème : "Credentials rejected" (Windows)
Causes possibles :
- Mot de passe incorrect
- Compte utilisateur désactivé
- UAC Remote Restrictions bloque les connexions admin locales
Solution :
# Sur le client Windows, vérifier et configurer UAC
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" `
-Name "LocalAccountTokenFilterPolicy" -Value 1 -PropertyType DWORD -Force
Problème : Certificat SSL invalide
Causes possibles :
- Certificat pas au format PEM
- Certificat pas importé dans le truststore
- Hostname ne correspond pas au CN du certificat
Solution :
# Vérifier le certificat
openssl x509 -in /var/lib/rundeck/winrm_client.pem -text -noout
# Vérifier le truststore
keytool -list -keystore /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts \
-storepass changeit | grep winrm
# Vérifier /etc/hosts
cat /etc/hosts | grep WIN-
Problème : Caractères accentués incorrects
Symptôme : Caractères comme ÿ, ‚ dans les sorties Windows
Solution : Vérifier que output-charset est bien défini à cp850 :
cat /var/lib/rundeck/secure_storage/demo-win.json | jq '.client.["output-charset"]'
# Doit retourner: "cp850"
Problème : Port 5986 fermé
Vérification :
# Depuis le serveur Rundeck
nc -zv <IP_WINDOWS> 5986
Solution sur Windows :
# Vérifier le pare-feu
Get-NetFirewallRule -DisplayName "WinRM HTTPS"
# Recréer la règle si nécessaire
New-NetFirewallRule -DisplayName "WinRM HTTPS" -Direction Inbound `
-LocalPort 5986 -Protocol TCP -Action Allow -Profile Any
Problème : Plugin WinRM non trouvé
Solution :
# Télécharger et installer le plugin
cd /var/lib/rundeck/libext
wget https://github.com/rundeck-plugins/py-winrm-plugin/releases/download/v2.1.3/py-winrm-plugin-2.1.3.zip
chown rundeck:rundeck py-winrm-plugin-2.1.3.zip
systemctl restart rundeckd
🔒 Sécurité
Bonnes pratiques
- Mots de passe : Stockés uniquement dans Rundeck Key Storage (chiffré)
- Clés SSH : Une clé dédiée par nœud (isolation)
- Certificats Windows : Auto-signés avec validation SSL/TLS activée
- Token API : Stocké dans
/root/rundeck_manager.conf(permissions 600) - Logs : Exclus du contrôle de version (
.gitignore)
Permissions recommandées
# Configuration
chmod 600 /root/rundeck_manager.conf
# Clés SSH
chmod 600 /var/lib/rundeck/.ssh/id_rsa_*
chown rundeck:rundeck /var/lib/rundeck/.ssh/*
# Certificats
chmod 644 /var/lib/rundeck/winrm_*.pem
chown rundeck:rundeck /var/lib/rundeck/winrm_*
📚 Documentation supplémentaire
📝 License
PolyForm Tight License 1.0.0
This software is licensed under the PolyForm Tight License 1.0.0 - see the LICENSE file for details.
⚠️ Important Notice
ANY USE OF THIS SOFTWARE WITHOUT EXPLICIT WRITTEN PERMISSION IS STRICTLY PROHIBITED.
This includes but is not limited to:
- ❌ Commercial use
- ❌ Private use
- ❌ Distribution
- ❌ Modification
- ❌ Derivative works
To request permission to use this software, contact:
Merveille Jean-Baptiste - jb@laboiteajb.fr
Or via https://git.laboiteajb.fr/scotch/rundeck-configurator-script.git
Unauthorized use will be prosecuted to the fullest extent of the law.
👤 Author & Copyright
Created by: Merveille Jean-Baptiste
Contact: jb@laboiteajb.fr
Site: laboiteajb.fr
Copyright: © 2026 Merveille Jean-Baptiste. All rights reserved.
Repository: https://git.laboiteajb.fr/scotch/rundeck-configurator-script.git
🤝 Contributing
Contributions are NOT accepted without prior written agreement with the author.
If you wish to contribute or report issues, please contact the author first.