GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter des commandes Linux sur un système distant via SSH

Aperçu

Nous devons souvent travailler avec des systèmes Linux distants. Nous nous connectons à l'hôte distant, effectuons le travail et quittons cette session. Pouvons-nous effectuer toutes ces actions depuis la machine locale ? Oui, c'est possible et ce tutoriel le démontre avec des exemples exhaustifs.

Exécution de la commande via SSH

SSH nous permet d'exécuter une commande sur une machine distante sans se connecter à cette machine. Dans ce didacticiel, nous discuterons de différentes manières d'y parvenir.

Exécuter une seule commande

Exécutons la commande uname sur SSH.

$ ssh [email protected] uname

Si vous observez la commande ci-dessus, elle est similaire à la commande SSH normale avec une différence mineure. Nous avons ajouté la commande à exécuter (surlignée en rouge).

Lorsque nous exécutons cette commande. Il générera la sortie ci-dessous :

Linux
Exécuter plusieurs commandes

En utilisant cette technique, nous pouvons exécuter plusieurs commandes en utilisant une seule session SSH. Nous avons juste besoin de séparer les commandes par un point-virgule (;).

$ ssh [email protected] "uname;hostname;date"

Comme prévu, ces commandes généreront la sortie ci-dessous :

Linux
linux-server
Thu Mar  1 15:47:59 IST 2018
Exécuter la commande avec des privilèges élevés

Parfois, nous devons exécuter une commande avec des privilèges élevés, dans ce cas, nous pouvons l'utiliser avec sudo.

$ ssh -t [email protected] sudo touch /etc/banner.txt

Notez que nous avons utilisé '-t ' option avec SSH, qui permet l'allocation de pseudo-terminal. La commande sudo nécessite un terminal interactif, cette option est donc nécessaire.

Exécuter le script

L'exécution à distance n'est pas seulement limitée aux commandes; nous pouvons même exécuter un script via SSH. Nous devons juste fournir le chemin absolu du script local à la commande SSH.

Créons un simple script shell avec le contenu suivant et nommez-le system-info.sh

#!/bin/sh
uname
hostname

Rendez le script exécutable et exécutez-le sur le serveur distant comme suit :

$ chmod +x system-info.sh
$ ssh [email protected] ./system-info.sh

Comme certains d'entre vous l'ont peut-être deviné, la sortie ci-dessous sera générée :

Linux
linux-server
Problème d'expansion variable

Si nous divisons les commandes en plusieurs lignes, l'expansion des variables ne fonctionnera pas. Voyons cela avec un exemple simple :

$ msg="Hello LinuxTechi"
$ ssh [email protected] 'echo $msg'

Lorsque nous exécutons la commande ci-dessus, nous pouvons observer que la variable n'est pas développée.

Pour résoudre ce problème, nous devons utiliser -c option de coque. Dans notre cas, nous l'utiliserons avec bash comme suit :

$ ssh [email protected] bash -c "'echo $msg'"
Configurer une session SSH sans mot de passe

Par défaut, SSH demandera à chaque fois une authentification par mot de passe. Ceci est appliqué pour des raisons de sécurité. Cependant, c'est parfois gênant. Pour surmonter cela, nous pouvons utiliser un mécanisme d'authentification par clé publique-privée.

Il peut être configuré en suivant les étapes suivantes :

1) Générer une paire de clés publique-privée

SSH fournit l'utilitaire ssh-keygen qui peut être utilisé pour générer des paires de clés sur la machine locale.

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/linuxtechi/.ssh/id_rsa): #press enter
Enter passphrase (empty for no passphrase):                         #press enter
Enter same passphrase again:                                        #press enter
Your identification has been saved in /home/linuxtechi/.ssh/id_rsa.
Your public key has been saved in /home/linuxtechi/.ssh/id_rsa.pub.

La sortie ci-dessus montre que les paires de clés générées sont stockées dans le répertoire ~/.ssh.

2) Ajouter la clé publique au fichier ~/.ssh/authorized_keys sur l'hôte distant

Pour ce faire, une méthode simple consiste à utiliser la commande ssh-copy-id.

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

Dans la commande ci-dessus :

  • -i option indique le fichier d'identité
  • ~/.ssh/id_rsa.pub est le fichier d'identité
  • le texte restant est l'adresse IP de l'utilisateur distant et du serveur distant

REMARQUE : Ne partagez jamais votre clé privée avec qui que ce soit.

3) C'est tout. N'est-ce pas si simple ? Nous pouvons maintenant exécuter la commande via SSH sans entrer de mot de passe. Vérifions cela.

$ ssh [email protected] uname

Limitation de l'authentification par clé publique-privée

Bien que l'authentification par clé publique-privée nous facilite la vie, elle n'est pas parfaite. Son inconvénient majeur est; nous ne pouvons pas l'automatiser, car l'interaction de l'utilisateur est requise la première fois. Se souvenir !!! nous avons fourni le mot de passe à la commande ssh-copy-id.

Il n'y a pas lieu de paniquer, ce n'est pas la fin du monde. Dans la section suivante, nous discuterons de l'approche qui élimine cette limitation.

utilitaire sshpass

Pour surmonter la limitation ci-dessus, nous pouvons utiliser l'utilitaire sshpass. Il fournit un moyen non interactif d'authentifier la session SSH. Cette section en explique les différentes manières.

Installation de sshpass

L'utilitaire sshpass fait partie du référentiel officiel d'Ubuntu. Nous pouvons l'installer en utilisant les commandes suivantes :

$ sudo apt-get update
$ sudo apt-get install sshpass

Exemples

sshpass peut accepter le mot de passe - en tant qu'argument, lisez-le à partir d'un fichier ou via une variable d'environnement. Discutons de toutes ces approches.

1) Mot de passe en argument

Nous pouvons fournir un mot de passe comme argument en utilisant l'option –p :

$ sshpass -p 'secrete-password' ssh [email protected] uname

2) Mot de passe du fichier

sshpass peut lire le mot de passe du fichier normal en utilisant l'option -f :

$ echo "secrete-password" > password-file
$ sshpass -f password-file ssh [email protected] uname

3) Mot de passe de la variable d'environnement

En plus de cela, nous pouvons fournir un mot de passe à partir de la variable d'environnement en utilisant l'option -e :

$ export SSHPASS="secrete-password"
$ sshpass -e ssh [email protected] uname

Conclusion

Ce didacticiel présente diverses astuces et conseils sur l'exécution de commandes à distance via SSH. Une fois que vous aurez compris ces astuces, cela vous facilitera la vie et améliorera définitivement votre productivité.

Lire aussi  : 9 exemples de commande 'diff' sous Linux


Linux
  1. Comment planter votre système :Commandes Linux dangereuses

  2. Comment vérifier le port ouvert sur un système Linux distant

  3. Comment utiliser les commandes strace et ltrace sous Linux

  4. écrire un script shell en ssh sur une machine distante et exécuter des commandes

  5. Comment exécuter à distance la commande ssh une commande sudo sans mot de passe

Comment vérifier qu'un port est ouvert sur un système Linux distant

Comment effectuer une sauvegarde Linux à distance à l'aide de SSH

Comment monter un système de fichiers Linux distant à l'aide de SSHFS

Comment générer et utiliser la clé SSH dans le système Linux ?

Comment utiliser SSH pour se connecter à un serveur distant sous Linux ou Windows

Comment exécuter les packages .run et .bin dans le système Linux