No description
Find a file
2026-02-06 14:40:41 +01:00
.gitignore restore file 2026-02-06 13:37:12 +01:00
common_functions.sh Initial commit 2026-02-06 13:27:32 +01:00
index.html Initial commit 2026-02-06 13:27:32 +01:00
install.sh Initial commit 2026-02-06 13:27:32 +01:00
LICENSE Initial commit 2026-02-06 13:27:32 +01:00
node_manager.sh Initial commit 2026-02-06 13:27:32 +01:00
README.md chore: remove kill_old_server.sh script and its reference from README.md. 2026-02-06 14:40:41 +01:00
rundeck.sh Initial commit 2026-02-06 13:27:32 +01:00
setup_winrm_client.ps1 Initial commit 2026-02-06 13:27:32 +01:00
store_winrm_password.sh Initial commit 2026-02-06 13:27:32 +01:00
upload_server.py Initial commit 2026-02-06 13:27:32 +01:00

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 :

  1. Installation de Rundeck
  2. Configuration de PostgreSQL
  3. Création des projets DEMO
  4. 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

  1. Exécutez ./rundeck.sh
  2. Choisissez Option 1 : Ajouter un client Linux
  3. Sélectionnez le(s) projet(s) cible(s)
  4. Fournissez les informations :
    • Nom du nœud (ex: web-01)
    • Hostname ou IP
    • Utilisateur SSH (ex: root)
    • Mot de passe SSH

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

  1. Télécharger le script PowerShell depuis la page web : http://<IP_RUNDECK>:8000
  2. 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

  1. Accédez à http://<IP_RUNDECK>:8000
  2. Glissez-déposez le fichier C:\Temp\rundeck_winrm.cer
  3. 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

  1. Exécutez ./rundeck.sh
  2. Choisissez Option 2 : Ajouter un client Windows
  3. Sélectionnez le(s) projet(s) cible(s)
  4. 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)

Le script effectuera automatiquement :

  • Détection hostname vs IP
  • Ajout automatique dans /etc/hosts si 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 :

  1. Exécutez ./rundeck.sh
  2. Choisissez Option 4 : Supprimer un client
  3. Sélectionnez le projet contenant le client
  4. Sélectionnez le nœud à supprimer
  5. 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_keys sur 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/hosts ou hostname réel
  • Vérification du CN du certificat

🐛 Dépannage

Problème : "Credentials rejected" (Windows)

Causes possibles :

  1. Mot de passe incorrect
  2. Compte utilisateur désactivé
  3. 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 :

  1. Certificat pas au format PEM
  2. Certificat pas importé dans le truststore
  3. 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

  1. Mots de passe : Stockés uniquement dans Rundeck Key Storage (chiffré)
  2. Clés SSH : Une clé dédiée par nœud (isolation)
  3. Certificats Windows : Auto-signés avec validation SSL/TLS activée
  4. Token API : Stocké dans /root/rundeck_manager.conf (permissions 600)
  5. 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.


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.