| Crates.io | xsshend |
| lib.rs | xsshend |
| version | 0.2.11 |
| created_at | 2025-07-05 06:18:44.396892+00 |
| updated_at | 2025-07-15 09:56:45.873357+00 |
| description | Outil Rust de téléversement multi-SSH avec interface TUI adaptive et gestion de clés SSH |
| homepage | https://willisback.github.io/xsshend |
| repository | https://github.com/WillIsback/xsshend |
| max_upload_size | |
| id | 1738783 |
| size | 425,226 |
xsshend est un outil Rust moderne et efficace pour le téléversement parallèle de fichiers vers multiples serveurs SSH. Il offre une interface TUI (Terminal User Interface) hiérarchique intuitive avec suivi en temps réel des transferts.
cargo install xsshend
git clone https://github.com/WillIsback/xsshend.git
cd xsshend
cargo install --path .
--ssh-key et --ssh-key-interactiveL'interface organise vos serveurs en arbre navigable :
📂 Production
├── 🌐 Region-A
│ ├── 📊 Public
│ │ ├── ✅ WEB_SERVER_01 (web01@prod-web-01.example.com)
│ │ └── �️ API_SERVER_01 (api01@prod-api-01.example.com)
│ └── 📋 Private
│ └── 🖥️ DATABASE_01 (db01@prod-db-01.example.com)
└── 🌐 Region-B
└── 📊 Public
└── 🖥️ CACHE_SERVER_01 (cache01@prod-cache-01.example.com)
Production/
├── Region-A/
│ ├── Public/ # Serveurs publics
│ └── Private/ # Serveurs internes
└── Region-B/
├── Public/
└── Private/
Staging/
├── Region-A/
└── Region-B/
Development/
└── Local/
~/.ssh/hosts.json# Cloner le projet
git clone https://github.com/username/xsshend.git
cd xsshend
# Compiler en mode release
cargo build --release
# Installer globalement
cargo install --path .
xsshend détecte automatiquement les clés SSH disponibles dans ~/.ssh/ :
id_ed25519, id_rsa, id_ecdsa, id_dsa# Sélection interactive - affiche un menu pour choisir parmi les clés disponibles
xsshend upload file.txt --ssh-key-interactive
# Spécification directe par nom de fichier (sans extension)
xsshend upload file.txt --ssh-key id_ed25519
xsshend upload file.txt --ssh-key company_key
# Sélection automatique forcée de la meilleure clé (Ed25519 > RSA > ECDSA)
xsshend upload file.txt --ssh-key-auto
# Comportement par défaut : sélection intelligente
xsshend upload file.txt
# Affiche les clés détectées et sélectionne automatiquement la meilleure
# Suggère l'utilisation de --ssh-key-interactive pour un choix manuel
Si aucune clé n'est sélectionnée ou disponible, xsshend utilise automatiquement ssh-agent pour l'authentification.
xsshend s'adapte automatiquement au thème de votre terminal :
Créez le fichier ~/.ssh/hosts.json avec la structure suivante :
{
"Production": {
"Region-A": {
"Public": {
"WEB_SERVER_01": {
"alias": "web01@prod-web-01.example.com",
"env": "PROD"
},
"API_SERVER_01": {
"alias": "api01@prod-api-01.example.com",
"env": "PROD"
}
},
"Private": {
"INTERNAL_WEB_01": {
"alias": "iweb01@prod-internal-01.example.com",
"env": "PROD"
}
}
}
},
"Staging": {
"Region-A": {
"Public": {
"STAGE_WEB_01": {
"alias": "web01@stage-web-01.example.com",
"env": "STAGE"
}
}
}
}
}
Assurez-vous que vos clés SSH publiques sont déployées sur tous les serveurs cibles :
# Copier votre clé publique vers un serveur
ssh-copy-id user@server.example.com
# Ou ajouter manuellement dans ~/.ssh/authorized_keys sur le serveur distant
Lancez l'application pour accéder à l'interface hiérarchique complète :
# Interface TUI complète avec workflow guidé
xsshend
# Ou explicitément en mode interactif
xsshend --interactive
Workflow guidé :
# Avec fichiers spécifiés, interface pour serveurs et destination
xsshend --interactive file1.txt file2.txt directory/
# Ou via sous-commande
xsshend upload file1.txt file2.txt --interactive
# Téléversement direct avec filtres
xsshend upload file.txt --region Production --dest /opt/app/
# Filtrer par région
xsshend upload *.log --region Region-A --dest /var/log/
# Filtrage par environnement (nouveau!)
xsshend upload ./config.json --env Production
xsshend upload ./staging-config.json --env Staging
# Filtrage combiné environnement + région
xsshend upload ./regional-config.json --env Production --region Region-A
# Filtrage combiné environnement + type
xsshend upload ./app.war --env Production --type Public
# Gestion des clés SSH - nouvelles options!
# Sélection interactive de la clé SSH
xsshend upload file.txt --ssh-key-interactive
# Spécifier une clé SSH par nom (sans extension)
xsshend upload file.txt --ssh-key id_rsa
xsshend upload file.txt --ssh-key company_key
# Forcer la sélection automatique de la meilleure clé
xsshend upload file.txt --ssh-key-auto
# Par défaut : sélection intelligente avec suggestion
xsshend upload file.txt # Sélectionne automatiquement la meilleure clé disponible
# Lister les serveurs disponibles avec étiquettes CLI
xsshend list
# ou
xsshend -l
Exemple de sortie enrichie :
🔍 Liste des cibles SSH disponibles:
📁 Production (--env Production)
📂 Region-A (--region Region-A)
📂 Public (--type Public)
🖥️ WEB_SERVER_01 → web01@prod-web-01.example.com (PROD)
🖥️ API_SERVER_01 → api01@prod-api-01.example.com (PROD)
📂 Private (--type Private)
�️ DATABASE_01 → db01@prod-db-01.example.com (PROD)
📁 Staging (--env Staging)
📂 Region-A (--region Region-A)
📂 Public (--type Public)
🖥️ STAGE_WEB_01 → web01@stage-web-01.example.com (STAGE)
📊 Total: 4 cibles disponibles
�💡 Exemples d'utilisation:
xsshend upload --env Production file.txt
xsshend upload --env Staging --region Region-A file.txt
xsshend upload --region Region-A --type Public file.txt
xsshend gère maintenant gracieusement les serveurs inaccessibles :
# Vérification de connectivité avant l'interface TUI
xsshend --online-only
# Les timeouts de connexion sont configurés pour éviter les blocages
# Les erreurs de connexion sont logguées mais n'interrompent pas les autres transferts
xsshend upload --region Region-A --type Public file.txt
# Filtrage par environnement complet
xsshend upload file.txt --env Production --dest /opt/app/
# Filtrage par environnement et région
xsshend upload file.txt --env Staging --region Region-A --dest /var/log/
# Filtrage par environnement et type de serveurs
xsshend upload config.json --env Production --type Public --dest /etc/app/
# Filtrage traditionnel par région ou type uniquement
xsshend upload *.log --region Region-A --dest /var/log/
xsshend upload config.json --type Public --dest /etc/app/
# Vérification de connectivité avant transfert
xsshend --online-only
Workflow interactif en 4 étapes :
⭐ Important : L'étape de saisie du répertoire de destination est présente et fonctionnelle dans le TUI. Utilisez Tab/Entrée pour naviguer entre les étapes.
# Téléverser un fichier vers tous les serveurs disponibles
xsshend upload ./myfile.tar.gz
# Téléverser vers un environnement spécifique
xsshend upload ./app.jar --env Production
# Téléverser vers une région spécifique
xsshend upload ./app.jar --region Region-A
# Téléverser vers des serveurs publics uniquement
xsshend upload ./config.json --type Public
# Téléverser vers un environnement ET une région
xsshend upload ./config.json --env Staging --region Region-A
# Téléverser vers un environnement ET un type
xsshend upload ./app.war --env Production --type Public
# Téléverser plusieurs fichiers
xsshend upload ./file1.txt ./file2.json
# Mode interactif avec sélection de serveurs
xsshend upload ./deploy.sh --interactive
# Spécifier le répertoire de destination
xsshend upload ./app.war --dest /opt/apps/
# Mode verbeux avec logs détaillés
xsshend upload ./script.sh --verbose
# Vérifier la connectivité avant le TUI (n'affiche que les serveurs en ligne)
xsshend --online-only
L'interface de progression se lance automatiquement et affiche des barres de progression en temps réel :
🚀 Début du téléversement:
📁 1 fichier(s)
🖥️ 3 serveur(s)
📂 Destination: /opt/uploads/
📤 Téléversement de ./myapp.jar vers /opt/uploads/myapp.jar...
Taille: 2.3 MB
web01@prod-web-01... [████████████████████████████████] 2.3MB/2.3MB (00:02)
api01@prod-api-01... [██████████████████ ] 1.5MB/2.3MB (00:01)
db01@stage-db-01.... [████████████████████████████ ] 2.1MB/2.3MB (00:00)
📊 Résumé du téléversement:
✅ WEB_SERVER_01 - 2,359,296 octets
✅ API_SERVER_01 - 2,359,296 octets
✅ DATABASE_01 - 2,359,296 octets
✅ Téléversement terminé avec succès!
# Exclure certains serveurs
xsshend upload ./file.txt --exclude WEB_SERVER_01,API_SERVER_02
# Timeout personnalisé
xsshend upload ./largefile.bin --timeout 300
# Nombre max de connexions parallèles
xsshend upload ./file.txt --max-parallel 5
# Mode dry-run (simulation)
xsshend upload ./file.txt --dry-run
# Forcer l'écrasement de fichiers existants
xsshend upload ./file.txt --force
# Utiliser SCP au lieu de SFTP
xsshend upload ./file.txt --protocol scp
ssh2 - Connectivité SSH/SFTP robusteindicatif - Barres de progression multi-threadsdialoguer - Prompts interactifs élégantsclap - Parsing d'arguments CLI modernerayon - Parallélisation efficacecrossterm - Contrôle terminal cross-platformserde - Sérialisation JSONrpassword - Saisie sécurisée de passphraseanyhow - Gestion d'erreurs ergonomique📋 Note : Une interface TUI complète avec contrôles interactifs (pause, reprise, logs) est prévue pour la version 0.2.0
src/
├── main.rs # Point d'entrée et CLI
├── config/
│ ├── mod.rs
│ └── hosts.rs # Parsing hosts.json
├── ssh/
│ ├── mod.rs
│ ├── client.rs # Client SSH/SFTP
│ ├── auth.rs # Authentification (placeholder)
│ └── transfer.rs # Transfert avec barres de progression
├── ui/
│ ├── mod.rs
│ └── prompts.rs # Dialogues interactifs
├── core/
│ ├── mod.rs
│ ├── uploader.rs # Orchestrateur principal
│ ├── parallel.rs # Gestion parallélisme (placeholder)
│ └── validator.rs # Validation fichiers/serveurs
└── utils/
├── mod.rs
├── env_expansion.rs # Expansion variables d'environnement
├── errors.rs # Types d'erreurs
└── logger.rs # Système de logs (placeholder)
# Installer les outils de développement
rustup component add clippy rustfmt
# Installer cargo-watch pour le développement
cargo install cargo-watch
# Développement avec rechargement automatique
cargo watch -x "run -- upload examples/test.txt --env Development"
# Tests
cargo test
cargo test -- --nocapture # Avec output des prints
# Linting
cargo clippy -- -D warnings
# Formatage
cargo fmt
# Vérification complète
cargo check --all-targets --all-features
# Benchmark de performance
cargo bench
# Documentation
cargo doc --open
tests/
├── integration/
│ ├── mod.rs
│ ├── ssh_tests.rs # Tests SSH réels
│ ├── config_tests.rs # Tests de configuration
│ └── upload_tests.rs # Tests de téléversement
├── fixtures/
│ ├── test_hosts.json # Fichier hosts de test
│ └── test_files/ # Fichiers de test
└── mock/
├── ssh_mock.rs # Mock serveur SSH
└── helpers.rs # Utilitaires de test
cargo test # Tests des modules
cargo test --verbose # Tests avec détails
Un module de test complet avec Multipass permet de tester xsshend sur de vraies VMs Ubuntu :
# Démonstration complète automatisée
cd test/
./demo.sh
# Ou setup manuel
./test-vms.sh launch-all # Lance 5 VMs Ubuntu configurées
./generate-test-files.sh # Génère fichiers de test variés
./run-integration-tests.sh # Exécute 9 tests automatisés
✅ Interface CLI et aide
✅ Configuration hosts.json et filtrage
✅ Mode dry-run (simulation)
✅ Transfert simple et multiple
✅ Barres de progression (gros fichiers)
✅ Transferts parallèles multi-serveurs
✅ Gestion d'erreurs robuste
✅ Tests de performance et stress
Résultat attendu : 9/9 tests passent = prêt pour production !
Consultez la documentation complète dans le répertoire docs/ :
Voir le guide de configuration pour :
# Vérifier la configuration SSH
ssh -v user@server.example.com
# Vérifier l'agent SSH
ssh-add -l
# Ajouter la clé si nécessaire
ssh-add ~/.ssh/id_rsa
# Créer le fichier de configuration
mkdir -p ~/.ssh
# Créer et éditer avec vos serveurs
nano ~/.ssh/hosts.json
# Utiliser --online-only pour pré-filtrer les serveurs accessibles
xsshend --online-only
# Les timeouts de connexion sont configurés automatiquement (5 secondes par défaut)
# En cas d'échec de connexion, xsshend continue avec les autres serveurs
# Vérifier la connectivité manuellement
ssh -o ConnectTimeout=5 user@server.example.com
# Logs d'erreur détaillés pour identifier les problèmes
RUST_LOG=debug xsshend upload file.txt --env Production
# Réduire le parallélisme via variable d'environnement
export XSSHEND_MAX_PARALLEL=5
xsshend upload largefile.zip
Consultez le guide de configuration pour plus de solutions.
# Mode verbeux
RUST_LOG=debug xsshend upload file.txt --region Production
# Affichage détaillé des transferts
xsshend upload file.txt --region Production --verbose
# Mode trace pour debugging SSH
RUST_LOG=ssh2=trace xsshend upload file.txt --region Production
Les contributions sont les bienvenues ! Veuillez suivre ces étapes :
git checkout -b feature/ma-fonctionnalite)git commit -am 'Ajoute ma fonctionnalité')git push origin feature/ma-fonctionnalite)cargo fmtcargo clippycargo testCe projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
xsshend - Téléversement SSH parallèle, simple et efficace 🚀