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.