đ xsshend
xsshend est un outil Rust moderne et efficace pour le téléversement de fichiers vers multiples serveurs SSH. Interface en ligne de commande simple et intuitive avec suivi en temps réel des transferts.
đ§ Installation
Pré-requis
- Rust 1.70+ (recommandé: version stable la plus récente)
- OpenSSL (optionnel, pour accélérer la compilation)
Via Cargo (recommandé)
đ AccĂ©lĂ©rer l'installation
L'installation peut ĂȘtre longue car elle compile OpenSSL depuis les sources par dĂ©faut. Pour accĂ©lĂ©rer :
Option 1 : Utiliser OpenSSL du systĂšme (Linux/macOS)
# Installer OpenSSL si nécessaire
# Ubuntu/Debian:
# Fedora/RHEL:
# macOS:
# Installer xsshend (utilise OpenSSL systĂšme automatiquement)
Option 2 : Compilation parallĂšle
# Utiliser tous les cĆurs CPU disponibles
Depuis les sources
đ Documentation
⚠Fonctionnalités principales
- đŻ TĂ©lĂ©versement simple vers plusieurs serveurs SSH
- đ Barres de progression en temps rĂ©el pour chaque transfert
- đ Authentification sĂ©curisĂ©e par clĂ©s SSH avec dĂ©couverte automatique
- đ Filtrage avancĂ© par environnement, rĂ©gion et type de serveur
- đïž Configuration hiĂ©rarchique des serveurs (environnements, rĂ©gions, types)
- đĄïž Gestion d'erreurs robuste avec rapports dĂ©taillĂ©s
- đ Support multi-fichiers avec validation automatique
- ⥠Mode dry-run pour simulation sans transfert réel
- đ§Ș Suite de tests complĂšte avec 93 tests automatisĂ©s
đ DĂ©marrage rapide
1. Initialisation
# Initialiser la configuration avec assistant interactif
# Forcer la réinitialisation
2. Configuration des serveurs
Créez le fichier ~/.ssh/hosts.json avec la structure hiérarchique :
3. Utilisation
# Lister les serveurs disponibles
# Téléverser un fichier vers tous les serveurs
# Filtrer par environnement
# Mode dry-run (simulation)
đź Utilisation
Commandes principales
# Aide générale
# Initialiser la configuration
# Lister les serveurs disponibles
# ou
# Téléverser des fichiers
Options de téléversement
# Filtrage par environnement
# Filtrage par région
# Filtrage par type de serveur
# Filtrage combiné
# Spécifier la destination
# Mode simulation (dry-run)
# Téléverser plusieurs fichiers
Exemples d'utilisation
# Déploiement en production
# Mise Ă jour de configuration de staging
# Déploiement sur serveurs publics uniquement
# Simulation d'un déploiement
# Upload vers une région spécifique
Interface de progression
Les transferts affichent une progression en temps réel :
đ DĂ©but du tĂ©lĂ©versement: 1 fichier(s) vers 3 serveur(s)
đ Destination: /opt/uploads/
đŻ Serveurs ciblĂ©s:
âą Production:Region-A:Public:WEB_SERVER_01 â web01@prod-web-01.example.com (PROD)
âą Production:Region-A:Public:API_SERVER_01 â api01@prod-api-01.example.com (PROD)
âą Production:Region-A:Private:DATABASE_01 â db01@prod-db-01.example.com (PROD)
đ€ TĂ©lĂ©versement de ./myapp.jar en cours...
web01@prod-web-01... [ââââââââââââââââââââââââââââââââ] 2.3MB/2.3MB â
api01@prod-api-01... [ââââââââââââââââââ ] 1.5MB/2.3MB âł
db01@prod-db-01..... [ââââââââââââââââââââââââââââ ] 2.1MB/2.3MB âł
â
Téléversement terminé avec succÚs!
đ 3 serveur(s) - 0 Ă©chec(s)
đ Gestion des clĂ©s SSH
Découverte automatique
xsshend détecte automatiquement les clés SSH disponibles dans ~/.ssh/ :
- Types supportés : Ed25519, RSA, ECDSA, DSA
- Gestion des passphrases avec ssh-agent
- Sélection automatique de la meilleure clé disponible
Priorité de sélection
- Ed25519 - Recommandé pour la sécurité et performance
- RSA - Compatibilité étendue
- ECDSA - Alternative moderne
- DSA - Support basique
Configuration SSH
# Vérifier les clés disponibles
# Ajouter une clé à l'agent SSH
# Copier une clé publique vers un serveur
âïž Configuration
Structure hiérarchique
La configuration suit une structure Ă trois niveaux :
Environment/
âââ Region/
â âââ Type/
â â âââ SERVER_NAME_1
â â âââ SERVER_NAME_2
â âââ Type/
âââ Region/
Exemple d'organisation :
Production/
âââ Region-A/
â âââ Public/ # Serveurs web publics
â âââ Private/ # Bases de donnĂ©es internes
âââ Region-B/
âââ Public/
âââ Private/
Staging/
âââ Region-A/
â âââ Public/
âââ Region-B/
Development/
âââ Local/
âââ Services/
Commande init
La commande xsshend init vous guide dans la configuration :
- Détection des clés SSH existantes
- Création du fichier hosts.json avec template
- Configuration des permissions sécurisées (.ssh/ en 700)
- Conseils d'utilisation personnalisés
# Configuration initiale interactive
# Réinitialisation complÚte
Format des entrées serveur
Chaque serveur est défini avec :
đ ïž DĂ©veloppement
Prérequis
- Rust 2021 Edition ou plus récent
- OpenSSH pour les clés SSH
- Git pour le développement
Installation développement
# Cloner le projet
# Installer les outils de développement
# Compiler en mode debug
# Compiler en mode release
Tests
Le projet inclut une suite de tests complĂšte avec 93 tests :
# Tests unitaires et d'intégration
# Tests avec sortie détaillée
# Tests de performance (benchmarks)
Qualité de code
# Formatage automatique
# Linting avec Clippy
# Vérification complÚte
# Documentation
đ§Ș Architecture de tests
Couverture de tests
- Unit tests : 6 tests (modules core)
- Config tests : 14 tests (configuration JSON)
- SSH keys tests : 10 tests (gestion des clés)
- Uploader tests : 14 tests (téléversements)
- CLI tests : 21 tests (interface ligne de commande)
- Integration tests : 12 tests (workflows complets)
- Validator tests : 16 tests (validation fichiers)
Tests d'intégration
Les tests d'intégration valident :
- â Initialisation et configuration
- â DĂ©tection et sĂ©lection des clĂ©s SSH
- â Parsing et filtrage des configurations
- â Workflows complets (init â list â upload)
- â Gestion des erreurs et cas limites
- â Performance avec grandes configurations
- â Interface CLI et validation des arguments
đ§ Stack technologique
Dépendances principales
ssh2- Client SSH/SFTP robusteclap- Interface ligne de commande moderneserde/serde_json- Sérialisation JSONindicatif- Barres de progressionanyhow- Gestion d'erreurs ergonomiquetempfile- Fichiers temporaires (tests)
Architecture modulaire
src/
âââ main.rs # Point d'entrĂ©e CLI
âââ lib.rs # Interface bibliothĂšque
âââ config/ # Configuration hosts.json
â âââ mod.rs
â âââ hosts.rs
âââ ssh/ # Client SSH et clĂ©s
â âââ mod.rs
â âââ client.rs
â âââ keys.rs
âââ core/ # Logique mĂ©tier
â âââ mod.rs
â âââ uploader.rs
â âââ validator.rs
âââ utils/ # Utilitaires
âââ mod.rs
âââ logger.rs
tests/ # Tests d'intégration
âââ cli_test.rs
âââ config_test.rs
âââ integration_test.rs
âââ ssh_keys_test.rs
âââ uploader_test.rs
âââ validator_test.rs
âââ common/
âââ mod.rs # Utilitaires de test
benches/ # Tests de performance
âââ performance_bench.rs
đĄïž DĂ©pannage
ProblĂšmes courants
Erreur: "Permission denied (publickey)"
# Vérifier la configuration SSH
# Vérifier l'agent SSH
# Ajouter une clé si nécessaire
Erreur: "hosts.json not found"
# Utiliser la commande d'initialisation
# Ou créer manuellement
Tests en échec
# Exécuter les tests avec détails
# Vérifier un test specific
# Tests d'intégration uniquement
Mode debug
# Logs détaillés
RUST_LOG=debug
# Mode trĂšs verbeux
RUST_LOG=trace
đ€ Contribution
Les contributions sont les bienvenues !
Processus de contribution
- Fork le projet
- Créer une branche feature (
git checkout -b feature/ma-fonctionnalite) - Commiter les changements (
git commit -am 'Ajoute ma fonctionnalité') - Pousser vers la branche (
git push origin feature/ma-fonctionnalite) - Ouvrir une Pull Request
Standards de qualité
Avant de soumettre une PR, assurez-vous que :
- â
Code formaté :
cargo fmt - â
Linting OK :
cargo clippy -- -D warnings - â
Tests passants :
cargo test - â Documentation Ă jour
Le workflow GitHub Actions vérifie automatiquement ces critÚres.
đ Licence
Ce projet est sous licence MIT - voir le fichier LICENSE pour les détails.
đ Remerciements
- clap-rs pour l'excellent framework CLI
- ssh2-rs pour les bindings SSH robustes
- indicatif pour les barres de progression
- serde pour la sérialisation JSON
- Communauté Rust pour l'écosystÚme exceptionnel
xsshend - TĂ©lĂ©versement SSH simple et efficace đ