⚙️ Configuration de xsshend
⚙️ Configuration de xsshend
Guide complet pour configurer et personnaliser xsshend selon vos besoins
📁 Fichier de configuration principal
Le fichier de configuration se trouve dans ~/.ssh/hosts.json
et définit votre infrastructure de serveurs SSH de manière hiérarchique.
Structure hiérarchique
{
"Environnement": {
"Région": {
"Type": {
"NOM_SERVEUR": {
"alias": "utilisateur@hostname",
"env": "TAG_ENVIRONNEMENT"
}
}
}
}
}
Exemple complet
{
"Production": {
"Region-A": {
"Public": {
"WEB_SERVER_01": {
"alias": "web01@prod-web-01.example.com",
"env": "PROD",
"description": "Serveur web principal"
},
"API_SERVER_01": {
"alias": "api01@prod-api-01.example.com",
"env": "PROD",
"description": "API principale"
},
"DATABASE_01": {
"alias": "db01@prod-db-01.example.com",
"env": "PROD",
"description": "Base de données primaire"
}
},
"Private": {
"INTERNAL_API_01": {
"alias": "iapi01@prod-internal-01.example.com",
"env": "PROD",
"description": "API interne"
},
"BACKUP_SERVER_01": {
"alias": "backup01@prod-backup-01.example.com",
"env": "PROD",
"description": "Serveur de sauvegarde"
}
}
},
"Region-B": {
"Public": {
"WEB_SERVER_02": {
"alias": "web02@prod-web-02.example.com",
"env": "PROD",
"description": "Serveur web secondaire"
},
"CACHE_SERVER_01": {
"alias": "cache01@prod-cache-01.example.com",
"env": "PROD",
"description": "Serveur de cache Redis"
}
}
}
},
"Staging": {
"Region-A": {
"Public": {
"STAGE_WEB_01": {
"alias": "web01@stage-web-01.example.com",
"env": "STAGE",
"description": "Environnement de test web"
},
"STAGE_API_01": {
"alias": "api01@stage-api-01.example.com",
"env": "STAGE",
"description": "API de test"
}
},
"Private": {
"STAGE_DATABASE": {
"alias": "db01@stage-db-01.example.com",
"env": "STAGE",
"description": "Base de données de test"
}
}
}
},
"Development": {
"Local": {
"Services": {
"DEV_WEB_01": {
"alias": "web01@dev.local.example.com",
"env": "DEV",
"description": "Serveur de développement local"
},
"DEV_DATABASE": {
"alias": "db@dev.local.example.com",
"env": "DEV",
"description": "Base de données de développement"
}
}
},
"Demo": {
"Hetzner": {
"DEMO_SERVER": {
"alias": "root@demo.hetzner.example.com",
"env": "DEMO",
"description": "Serveur de démonstration"
}
}
}
},
"Docker-Test": {
"Local": {
"Containers": {
"SSH_TEST_01": {
"alias": "root@localhost:2222",
"env": "TEST"
},
"SSH_TEST_02": {
"alias": "root@localhost:2223",
"env": "TEST"
},
"SSH_TEST_03": {
"alias": "root@localhost:2224",
"env": "TEST"
}
}
}
}
}
Champs de configuration
Champs obligatoires
- alias : Chaîne de connexion SSH (format
utilisateur@hostname
ouutilisateur@hostname:port
) - env : Tag d’environnement pour identification (ex: “PROD”, “STAGE”, “DEV”)
Champs optionnels
- description : Description du serveur (affiché dans l’interface)
- port : Port SSH spécifique (si différent de 22)
- key_file : Chemin vers la clé SSH privée spécifique
Bonnes pratiques d’organisation
Noms des environnements
Utilisez des noms clairs et cohérents :
- Production : Environnement de production
- Staging : Environnement de pré-production
- Development : Environnement de développement
- Testing : Environnement de tests automatisés
Noms des régions
Organisez par localisation géographique ou logique :
- Region-A, Region-B : Régions géographiques
- Local : Infrastructure locale
- Cloud-AWS, Cloud-GCP : Par fournisseur cloud
- Datacenter-1, Datacenter-2 : Par centre de données
Types de serveurs
Catégorisez par fonction ou visibilité :
- Public : Serveurs accessibles depuis Internet
- Private : Serveurs du réseau interne
- Services : Services spécifiques (base de données, cache, etc.)
- Workers : Serveurs de traitement
- Storage : Serveurs de stockage
Noms des serveurs
Utilisez une convention cohérente :
- Descriptif + Numéro :
WEB_SERVER_01
,API_SERVER_02
- Fonction + Environnement + Numéro :
PROD_WEB_01
,STAGE_API_01
- Service + Instance :
NGINX_MAIN
,POSTGRES_PRIMARY
Configuration SSH
Authentification par clé
xsshend utilise l’authentification SSH par clé. Assurez-vous que :
- Votre clé publique est déployée sur tous les serveurs cibles
- Votre agent SSH est actif :
ssh-add ~/.ssh/id_rsa
- Les permissions sont correctes sur vos clés privées :
chmod 600 ~/.ssh/id_rsa
Fichier ~/.ssh/config
Vous pouvez combiner xsshend avec votre configuration SSH existante :
Host prod-web-*
User web01
IdentityFile ~/.ssh/prod_key
StrictHostKeyChecking no
Host stage-*
User deploy
IdentityFile ~/.ssh/stage_key
Port 2222
Host dev.local.*
User developer
IdentityFile ~/.ssh/dev_key
Variables d’environnement
Configuration xsshend
- XSSHEND_CONFIG : Chemin alternatif vers le fichier hosts.json
- XSSHEND_LOG_LEVEL : Niveau de log (debug, info, warn, error)
- XSSHEND_MAX_PARALLEL : Nombre maximum de transferts simultanés
Exemples :
export XSSHEND_CONFIG="/path/to/custom/hosts.json"
export XSSHEND_LOG_LEVEL="debug"
export XSSHEND_MAX_PARALLEL="10"
Raccourcis et personnalisation
Alias shell utiles
Ajoutez ces alias dans votre .bashrc
ou .zshrc
:
# Lancement rapide en mode interactif
alias xs='xsshend --interactive'
# Téléversement vers production avec confirmation
alias xsprod='xsshend upload --env Production --interactive'
# Téléversement vers staging
alias xsstage='xsshend upload --env Staging --interactive'
# Liste des serveurs de production
alias xslist='xsshend list --env Production'
# Mode simulation
alias xsdry='xsshend upload --dry-run'
Scripts de déploiement
Créez des scripts pour vos déploiements récurrents :
#!/bin/bash
# deploy-frontend.sh
xsshend upload dist/* --env Production --type Public --dest /var/www/html/
#!/bin/bash
# deploy-config.sh
xsshend upload config/prod/*.conf --env Production --dest /etc/myapp/ --interactive
Dépannage
Problèmes de connexion
- Vérifiez la connectivité :
ssh user@hostname
- Vérifiez l’agent SSH :
ssh-add -l
- Testez avec verbosité :
XSSHEND_LOG_LEVEL=debug xsshend ...
Fichier de configuration
- Validez le JSON :
python -m json.tool ~/.ssh/hosts.json
- Vérifiez les permissions :
ls -la ~/.ssh/hosts.json
- Testez la configuration :
xsshend list
Performance
- Réduisez le parallélisme :
XSSHEND_MAX_PARALLEL=5
- Utilisez la compression SSH : configurez
Compression yes
dans~/.ssh/config
- Optimisez la taille des fichiers transférés