GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter des commandes sur des systèmes Linux distants via SSH

L'autre jour, je testais comment garder les autorisations de fichiers intactes lors de la copie de fichiers ou de répertoires à plusieurs emplacements et systèmes. Lorsque je voulais vérifier les autorisations de fichiers sur un système distant, je devais me connecter à ce système via SSH et vérifier les attributs. Le processus de connexion et de déconnexion du système distant à plusieurs reprises m'a un peu ennuyé. Je pensais que ce serait mieux si je pouvais exécuter des commandes sur des systèmes Linux distants via SSH.

Heureusement, je trouve une solution de contournement pour le faire après avoir consulté les pages de manuel de ssh commande. Si vous vous êtes déjà demandé comment exécuter une commande ou un script sur un système distant à partir de votre système local lui-même sans avoir à vous connecter à ce système distant, voici comment procéder.

Exécuter des commandes sur des systèmes Linux distants via SSH

La manière typique d'exécuter une commande ou un script sur un système distant via SSH à partir du système local est la suivante :

$ ssh <[email protected]_Address-or-Doman_name> <Command-or-Script>

Permettez-moi de vous montrer quelques exemples.

Exécutez une seule commande sur des systèmes distants via SSH

Supposons que vous souhaitiez trouver les détails du noyau de votre système Linux distant. Pour ce faire, lancez simplement :

$ ssh [email protected] uname -a

Ici,

  • sk est le nom d'utilisateur de mon système distant,
  • 192.168.225.22 est l'adresse IP du système distant,
  • Et "uname -a" est la commande que je souhaite exécuter sur le système distant à partir de mon système local.

Exemple de résultat :

Exécuter des commandes sur des systèmes Linux distants via SSH

Voir? Je ne me suis pas réellement connecté au système distant, mais j'ai exécuté le uname commande sur le système distant via SSH et affiche la sortie dans le terminal de mon système local.

Vous pouvez également spécifier la commande entre guillemets comme ci-dessous.

$ ssh [email protected] "uname -a"

Ou,

$ ssh [email protected] 'uname -a'

Si vous avez modifié le port par défaut du protocole SSH , il suffit de le mentionner en utilisant -p paramètre comme ci-dessous.

$ ssh -p 2200 [email protected] uname -a

Exécuter plusieurs commandes sur des systèmes distants via SSH

Vous pouvez également exécuter plusieurs commandes sur la télécommande en les spécifiant entre guillemets comme ci-dessous.

$ ssh [email protected] "uname -r && lsb_release -a"

Ou,

$ ssh [email protected] "uname -r ; lsb_release -a"

Les commandes ci-dessus afficheront la version du noyau et les détails de distribution de mon serveur Ubuntu.

Exemple de résultat :

Exécutez plusieurs commandes sur des systèmes distants via SSH sous Linux

Comme l'un de nos lecteurs l'a mentionné dans la section des commentaires ci-dessous, vous devez spécifier plusieurs commandes entre guillemets. Si vous n'utilisez pas de guillemets, la première commande s'exécutera sur le système distant et la seconde commande sera évaluée sur la machine locale uniquement. L'ensemble de la commande entre guillemets sera traité à distance comme prévu.

Remarque : Connaître la différence entre “&&” et “;” opérateurs entre les commandes :

Le “&&” l'opérateur exécute la deuxième commande uniquement si la première commande a réussi.

Exemple :

sudo apt-get update && sudo apt-get upgrade

Dans le cas ci-dessus, la deuxième commande (sudo apt-get upgrade ) s'exécutera si la première commande a réussi. Sinon, il ne fonctionnera pas.

Le “;” l'opérateur exécute la deuxième commande même si la première commande a réussi ou échoué.

Exemple :

sudo apt-get update ; sudo apt-get upgrade

Dans le cas ci-dessus, la deuxième commande (sudo apt-get upgrade ) s'exécutera même si la première commande échoue.

Exécuter des commandes avec les privilèges "sudo" sur des systèmes distants via SSH

Certaines commandes nécessitent "sudo" privilèges d'exécution. Par exemple, la commande suivante installera Vim sur mon système distant.

$ ssh -t [email protected] sudo apt install apache2

Exemple de résultat :

Exécutez des commandes avec les privilèges "sudo" sur des systèmes distants via SSH

As-tu remarqué? J'ai utilisé -t drapeau dans la commande ci-dessus. Nous devons mentionner ce -t drapeau pour forcer l'allocation de pseudo-terminal. Cela peut être utilisé pour exécuter des programmes arbitraires basés sur l'écran sur une machine distante, ce qui peut être très utile, par ex. lors de la mise en œuvre des services de menu.

De plus, j'ai saisi le mot de passe deux fois . La première fois, j'ai entré le mot de passe de l'utilisateur distant pour accéder au système distant via SSH à partir de mon système local et le deuxième mot de passe est requis pour donner l'autorisation sudo à l'utilisateur distant d'installer l'application (c'est-à-dire apache2 dans ce cas) sur le système distant .

Vérifions si le service Apache est en cours d'exécution à l'aide de la commande :

$ ssh -t [email protected] sudo systemctl status apache2
[email protected]'s password: 
[sudo] password for sk: 
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s ago
Main PID: 5251 (apache2)
Tasks: 55 (limit: 2318)
CGroup: /system.slice/apache2.service
├─5251 /usr/sbin/apache2 -k start
├─5253 /usr/sbin/apache2 -k start
└─5254 /usr/sbin/apache2 -k start

Dec 19 11:08:03 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
Dec 19 11:08:03 ubuntuserver apachectl[5227]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2409:4072:51f:a1b6:a00:27ff:f
Dec 19 11:08:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.

De même, nous pouvons exécuter n'importe quelle commande ou script sur un système distant via SSH à partir du système local.

Exécuter des scripts locaux sur des systèmes distants via SSH

Laissez-nous créer un script simple sur notre système local pour afficher toutes les informations disponibles sur le nom de distribution de votre système distant, la gestion des packages et les détails de base, etc.

$ vi system_information.sh

Ajoutez les lignes suivantes :

#!/bin/bash
#Name: Display System Details
#Owner: OSTechNIx
#----------------------------
echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*

Appuyez sur ESC clé et tapez :wq pour enregistrer le fichier et quitter.

Exécutez maintenant ce script sur votre système distant via SSH à l'aide de la commande :

$ ssh [email protected] 'bash -s' < system_information.sh

Exemple de résultat :

Mot de passe de
[email protected]'s password: 
/etc/debian_version /etc/lsb-release /etc/os-release
buster/sid
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Si vous ne spécifiez pas 'bash -s' dans la commande ci-dessus, vous obtiendrez les détails du système distant mais le pseudo-terminal ne sera pas attribué.

Enregistrer la sortie du système distant vers le système local

Cela peut être utile si vous souhaitez partager la sortie d'une commande que vous exécutez sur le système distant via SSH avec votre équipe d'assistance ou un collègue.

La commande suivante exécutera "du -ah" sur votre système distant via SSH et enregistrez la sortie dans diskusage.txt fichier dans votre système local.

$ ssh [email protected] du -ah > diskusage.txt

Vous pouvez ensuite analyser les détails d'utilisation du disque en affichant le diskusage.txt fichier utilisant cat visionneuses de commande ou de texte.

$ cat diskusage.txt 
4.0K ./.profile
4.0K ./.gnupg/private-keys-v1.d
8.0K ./.gnupg
76K ./data/image.jpg
128K ./data/file.pdf
20K ./data/text.docx
5.9M ./data/audio.mp3
6.1M ./data
0 ./.sudo_as_admin_successful
4.0K ./pacman?inline=false
4.0K ./.bash_logout
4.0K ./.wget-hsts
4.0K ./.bash_history
0 ./.cache/motd.legal-displayed
4.0K ./.cache
4.0K ./deb-pacman_1.0-0.deb
4.0K ./.bashrc
6.2M .

Configurer l'authentification basée sur la clé SSH pour éviter la saisie de mot de passe

Si vous exécutez souvent des commandes sur des systèmes distants, vous souhaiterez peut-être configurer l'authentification basée sur une clé SSH pour ignorer la saisie du mot de passe à chaque fois. Plus de détails peuvent être trouvés dans le lien suivant.

  • Comment configurer l'authentification basée sur une clé SSH sous Linux

Suggestion de lecture :

  • Comment reprendre des fichiers partiellement transférés via SSH à l'aide de Rsync
  • Comment exécuter une commande unique sur plusieurs systèmes distants à la fois
  • DSH – Exécuter une commande Linux sur plusieurs hôtes à la fois
  • Comment créer un alias SSH sous Linux
  • SSLH :partager un même port pour HTTPS et SSH
  • ScanSSH – Serveur SSH rapide et analyseur de proxy ouvert
  • Comment se connecter en SSH à un répertoire particulier sous Linux
  • Autoriser ou refuser l'accès SSH à un utilisateur ou à un groupe particulier sous Linux
  • Comment empêcher la session SSH de se déconnecter sous Linux
  • Comment activer SSH sur FreeBSD
  • Astuces Vim - Modifier des fichiers distants avec Vim sous Linux

J'espère que cela vous aidera.


Linux
  1. Envoyer des commandes à plusieurs sessions SSH avec Terminator

  2. Administration Linux en masse/à distance ?

  3. Exécuter des commandes sur une machine distante via PHP

  4. Jouez du son * sur * une machine distante via ssh sur Ubuntu / Linux

  5. Comment installer Linux à distance via SSH ?

Commandes SSH sous Linux avec exemples d'utilisation

Comment SSH dans un répertoire particulier sous Linux

Comment configurer le transfert X11 à l'aide de SSH sous Linux

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

Utilisation de la commande SSH dans les systèmes Linux/Unix

Comment SSH au serveur via Linux