Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Exécuter une ou plusieurs commandes à distance en SSH

Que vous souhaitiez effectuer des tâches simples comme lister des fichiers dans un répertoire ou lancer des scripts complexes, Secure Shell (SSH) s’avère être une solution incontournable pour les administrateurs systèmes, les développeurs et les ingénieurs réseaux.
Dans cet article, nous allons explorer les différentes méthodes pour exécuter une ou plusieurs commandes à distance via SSH grâce à son mode non interactif, en montrant des exemples pratiques et des cas d’utilisation adaptés à diverses situations. Vous découvrirez comment tirer parti des options offertes par SSH pour faciliter la gestion de vos systèmes à distance, tout en optimisant sécurité et efficacité.
Cela fonctionne avec le client SSH de Linux, MacOS ou même de Windows 10 ou Windows 11.

Exécuter une ou plusieurs commandes à distance en SSH

Comment exécuter une commande à distance en SSH

Syntaxe

La syntaxe est la suivante pour l’exécution de commandes via ssh :

ssh <utilisateur>@<serveur> commande1
ssh <utilisateur>@<serveur> commande2
# pipe #
ssh ssh <utilisateur>@<serveur> 'commande | commande'
# Exécuter plusieurs commandes
ssh <utilisateur>@<serveur> "commande1; commande2; commande3"

Le client se connecte en SSH, si l’authentification est par mot de passe, ce dernier sera demandé.
Si des clés SSH existent, elles seront utilisées.
Une fois connecté, le client exécute la commande SSH et ferme aussitôt la session SSH.
D’où le terme de session non interactive.

Exemple basique

Si vous voulez exécuter la commande ls sur une machine distante ayant l’adresse IP 10.0.0.177 avec l’utilisateur mak, la commande serait :

ssh mak@10.0.0.177 "ls"

Prenez l’habitude d’utiliser les guillemets ou double-guillemets, car cela permet d’utiliser les options des commandes.
Par exemple :

ssh mak@10.0.0.177 'df -H'

Ici donc le client se connecte en SSH, exécute la commande puis ferme la session SSH.
Si vous ne voulez pas que celle-ci se ferme, il faut exécuter un session Shell.
Par exemple ci dessous, on utilise la commande cd pour changer de répertoire puis on ouvre un shell avec bash :

sh -t mak@10.0.0.177 'cd /repertoire/chemin; bash -l'

Lorsque le port n’est pas par défaut (port 22), vous devez utiliser l’option -p pour spécifier un autre port SSH; par exemple ici le port 2222 :

ssh -p 2222 mak@10.0.0.177 "ls"

Enfin pour utiliser une clé privée comme authentification, ajoutez l’option -i comme ceci :

ssh -i /chemin/vers/cle_privee mak@10.0.0.177 "ls"

Exécuter sudo dans une commande ssh

En suivant les exemples précédents, vous pouvez aussi utiliser sudo dans une commande ssh distant.
Voici la syntaxe :

ssh -t <utilisateur>@<nom d'utilisateur> sudo commande
ssh -t <utilisateur>@<nom d'utilisateur> 'sudo commande arg1 arg2'

Par exemple pour exécuter la commande whoami à distance par ssh :

ssh mak@10.0.0.177 -t "sudo whoami"

L’option -t permet de forcer l’allocation de pseudo-terminaux. Cela peut être utilisé pour exécuter des programmes arbitraires à l’écran sur une machine distante, ce qui peut être très utile, par exemple pour mettre en œuvre des services de menu.
Notez que plusieurs options -t multiples forcent l’allocation de tty, même si ssh n’a pas de tty local.

Exécuter sudo dans une commande ssh

Exécuter un script à distance en SSH

Vous pouvez aussi exécuter un script en SSH.
Par exemple pour exécuter ~/script/monscript.sh :

ssh mak@10.0.0.177 '~/script/monscript.sh'

Comment exécuter plusieurs commandes en SSH

Utilisation basique

Comme nous l’avons vu dans le paragraphe syntaxe, vous pouvez passer de multiples commandes en SSH.

ssh <utilisateur>@<serveur> "commande1; commande2; commande3"

Par exemple :

ssh mak@10.0.0.177 "date; uptime; df -H"

Avec un fichier texte

  • Créez un nouveau fichier nommé commandes.txt à l’aide de la commande cat :
cat > commandes.txt
  • Ajoutez la commande que vous souhaitez exécuter :
date
uptime
df -H
  • Puis appuyez sur CTRL+C pour enregistrer les modifications et arrêter l’exécution de la commande cat.
  • Ensuite, exécutez ensuite les commandes à distance à l’aide de la commande ssh à partir du fichier local appelé commandes.txt ;
ssh mak@10.0.0.177 < commandes.txt
Comment exécuter plusieurs commandes en SSH

Comment exécuter plusieurs commandes ssh lors de l’utilisation de scripts shell ?

Voici un exemple de script shell qui exécute plusieurs commandes SSH à distance sur un serveur. Ce script se connecte à une machine distante via SSH, exécute des commandes et récupère les résultats localement.

#!/bin/bash

# Variables
SERVER="utilisateur@adresse_IP"
KEY="/chemin/vers/cle_privee" # Optionnel, si vous utilisez une clé privée
LOG_FILE="resultats_commande.log"

# Test de connexion SSH
echo "Connexion au serveur $SERVER..."
if ssh -i $KEY $SERVER "echo 'Connexion réussie'"; then
  echo "Connexion SSH réussie."
else
  echo "Échec de la connexion SSH."
  exit 1
fi

# Exécution de la première commande : lister les fichiers dans un répertoire
echo "Listing des fichiers sur le serveur distant..."
ssh -i $KEY $SERVER "ls -l /chemin/vers/directory" > $LOG_FILE

# Exécution de la deuxième commande : vérifier l'utilisation du disque
echo "Vérification de l'utilisation du disque..."
ssh -i $KEY $SERVER "df -h" >> $LOG_FILE

# Exécution de la troisième commande : afficher les processus en cours
echo "Affichage des processus en cours..."
ssh -i $KEY $SERVER "ps aux" >> $LOG_FILE

# Exécution d'une commande en sudo (si l'utilisateur a les privilèges)
echo "Redémarrage du service Apache (nécessite sudo)..."
ssh -i $KEY $SERVER "sudo systemctl restart apache2" >> $LOG_FILE

# Message de fin
echo "Toutes les commandes ont été exécutées. Résultats sauvegardés dans $LOG_FILE."

Les explications sur les variables :

  • SERVER : Identifie l’utilisateur et l’adresse IP du serveur distant
  • KEY : Chemin vers la clé privée SSH si elle est utilisée (facultatif si vous n’avez pas besoin de clé)
  • LOG_FILE : Fichier local où les résultats des commandes seront enregistrés

Un des problèmes du script ci-dessous est la répétition des commandes SSH.
On peut alors créer une fonction pour appeler directement la commande ssh avec des commandes spécifiques ci-besoin.
Par exemple, ci-dessous, on peut exécuter le script test.sh en lui passant un argument.

function ssh_commande {
    ssh $KEY $SERVER "cd testrep;./test.sh \"$1\""
}

ssh_commande monscript.sh

Tableau récapitulatif

Commande SSH Description
ssh utilisateur@adresse_IP “commande” Commande SSH de base pour exécuter une commande à distance
ssh -p port utilisateur@adresse_IP “commande” Spécifie un port SSH différent du port par défaut (22)
ssh -i /chemin/vers/cle_privee utilisateur@adresse_IP “commande” Utilise une clé privée spécifique pour l’authentification
ssh utilisateur@nom_de_domaine “commande” Connexion en utilisant un nom de domaine plutôt qu’une adresse IP
ssh utilisateur@adresse_IP “sudo commande” Exécute une commande avec des privilèges superutilisateur (sudo)
ssh utilisateur@adresse_IP “ls -l /chemin/repertoire” Liste les fichiers dans un répertoire spécifique sur la machine distante
ssh utilisateur@adresse_IP “cat /chemin/fichier.txt” Affiche le contenu d’un fichier distant sur la machine distante
Tableau récapitulatif des commandes SSH

L’article Exécuter une ou plusieurs commandes à distance en SSH est apparu en premier sur malekal.com.

Enregistrer un commentaire

0 Commentaires