Aller au contenu

Commandes à distance et transferts

Bayesian SSH fournit des commandes pour exécuter des scripts sur plusieurs hôtes et transférer des fichiers en parallèle. Il prend en charge le ciblage par lot, le suivi de progression et le basculement automatique entre SFTP et SCP.

La commande bssh exec exécute des commandes ponctuelles sur SSH sans ouvrir de session de shell interactive.

Placez systématiquement -- avant la commande distante pour séparer les options de bssh des arguments de la commande.

Exécutez une commande sur un hôte précis :

bssh exec web-prod -- uname -a

Lorsqu’il cible un hôte unique, bssh exec transmet directement stdout et stderr à votre terminal et quitte avec le code de sortie du processus distant.

Vous pouvez cibler plusieurs serveurs en parallèle par tag ou exécuter une commande sur l’ensemble de votre inventaire.

Cibler des hôtes par tag :

bssh exec -t prod -- systemctl status nginx

Cibler toutes les connexions enregistrées :

bssh exec --all -- uptime

L’exécution multi-hôtes s’exécute simultanément sur un maximum de 16 hôtes à la fois. La sortie de chaque hôte est séparée par un bloc d’en-tête :

🚀 Executing 'uptime' across 2 host(s)...
==================================================
Host: web-prod (deploy@web.example.com)
==================================================
12:45:10 up 45 days, 3:12, 1 user, load average: 0.15, 0.08, 0.02
(Exit Code: 0)
==================================================
Host: db-prod (deploy@10.0.4.12)
==================================================
12:45:10 up 90 days, 14:02, 0 users, load average: 0.42, 0.38, 0.30
(Exit Code: 0)

Si une commande écrit sur stderr, cette sortie est isolée dans un bloc [STDERR]. Si l’un des hôtes échoue, bssh exec se termine avec une erreur précisant le nombre d’hôtes en échec.

Pour vérifier quels hôtes seront contactés avant d’exécuter la commande :

bssh exec -t prod --dry-run -- systemctl restart nginx
🔍 [DRY-RUN PREVIEW]
Command to execute: systemctl restart nginx
Target hosts (2):
- web01 (deploy@10.0.4.10)
- web02 (deploy@10.0.4.11)
Dry-run complete. No remote commands were executed.

Utilisez bssh exec [TARGET] -- <COMMAND>... directement depuis votre terminal.

La commande bssh upload transfère un fichier ou un répertoire local vers un ou plusieurs hôtes distants en parallèle.

bssh upload web-prod ./app.tar.gz /opt/app/

Vous pouvez désigner les hôtes explicitement, par tag ou sur toutes les connexions :

  • Liste séparée par des virgules :
    bssh upload web1,web2 ./app.tar.gz /opt/app/
  • Par tag :
    bssh upload -t prod ./app.tar.gz /opt/app/
  • Toutes les connexions enregistrées :
    bssh upload --all ./app.tar.gz /opt/app/
  • -r, --recursive : Téléverse récursivement une arborescence complète de répertoires.
    bssh upload web-prod -r ./config/ /etc/myapp/
  • --mode <OCTAL> : Définit les permissions du fichier distant (par défaut : 0o644).
    bssh upload web-prod ./deploy-key.pem /root/.ssh/id_rsa --mode 0o600
  • -j, --parallel <N> : Nombre maximal d’envois simultanés vers les hôtes (par défaut : 16).
    bssh upload -t prod -j 8 ./release.tar.gz /var/www/
  • --offset <BYTES> : Reprend un transfert interrompu à partir d’un décalage d’octets (hôte unique uniquement).
  • --dry-run : Prévisualise les hôtes correspondants et les chemins de destination résolus sans transférer de fichiers.

Exécuté dans un terminal interactif, bssh upload affiche une barre de progression par hôte indiquant les octets transférés, les débits et l’estimation du temps restant.

bssh utilise le protocole SFTP natif pour les connexions directes. Lors d’un transfert via un bastion ou une session Kerberos, il bascule automatiquement vers SCP. Sur les bastions interactifs (tels que « The Bastion » d’OVH), il s’exécute via un script wrapper généré automatiquement selon le protocole --osh scp.

Utilisez bssh upload [OPTIONS] [TARGETS] <LOCAL> <REMOTE> dans votre terminal.

La commande bssh download transfère des fichiers ou répertoires depuis un serveur distant vers votre machine locale.

bssh download web-prod /var/log/nginx/access.log ./access.log
  • -r, --recursive : Télécharge récursivement une arborescence distante complète :
    bssh download db-prod -r /backups/daily/ ./local-backups/

À l’instar des envois, bssh download emploie SFTP en natif sur les connexions directes et bascule vers SCP lors d’un transit par des bastions ou lorsque le sous-système SFTP n’est pas disponible.

Dans les terminaux interactifs, une barre de progression indique l’avancement, la vitesse et le volume total d’octets transférés.

Option Commandes Description
-a, --all exec, upload Cible toutes les connexions enregistrées en parallèle.
-t, --tag <TAG> exec, upload Cible les connexions portant ce tag.
--dry-run exec, upload Prévisualise les hôtes cibles sans exécuter ni transférer.
-r, --recursive upload, download Traite récursivement les arborescences de répertoires.
--mode <OCTAL> upload Définit les permissions du fichier distant (par défaut : 0o644).
-j, --parallel <N> upload Nombre maximal d’envois simultanés (par défaut : 16).
--offset <BYTES> upload Reprend l’envoi depuis un décalage en octets (hôte unique).