GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ausführen von Befehlen auf Remote-Linux-Systemen über SSH

Neulich habe ich getestet, wie man Dateiberechtigungen beim Kopieren von Dateien oder Verzeichnissen intakt hält an mehreren Standorten und Systemen. Wenn ich die Dateiberechtigungen auf einem Remote-System überprüfen wollte, musste ich mich über SSH bei diesem System anmelden und die Attribute überprüfen. Das mehrmalige An- und Abmelden vom Remote-System hat mich etwas genervt. Ich dachte, es wäre besser, wenn ich Befehle auf entfernten Linux-Systemen über SSH ausführen könnte.

Glücklicherweise finde ich eine Problemumgehung, nachdem ich in die Manpages von ssh geschaut habe Befehl. Wenn Sie sich jemals gefragt haben, wie Sie einen Befehl oder ein Skript auf einem Remote-System von Ihrem lokalen System selbst ausführen können, ohne sich bei diesem Remote-System anmelden zu müssen, erfahren Sie hier, wie es geht.

Befehle auf Remote-Linux-Systemen über SSH ausführen

Die typische Art, einen Befehl oder ein Skript auf einem entfernten System über SSH vom lokalen System aus auszuführen, ist:

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

Lassen Sie mich Ihnen einige Beispiele zeigen.

Führen Sie einen einzelnen Befehl auf Remote-Systemen über SSH aus

Angenommen, Sie möchten Kernel-Details finden Ihres Remote-Linux-Systems. Führen Sie dazu einfach Folgendes aus:

$ ssh [email protected] uname -a

Hier,

  • sk ist der Benutzername meines Remote-Systems,
  • 192.168.225.22 die IP-Adresse des entfernten Systems ist,
  • Und "uname -a" ist der Befehl, den ich von meinem lokalen System auf dem entfernten System ausführen möchte.

Beispielausgabe:

Befehle auf Remote-Linux-Systemen über SSH ausführen

Sehen? Ich habe mich nicht wirklich beim Remote-System angemeldet, aber den uname ausgeführt Befehl auf dem Remote-System über SSH und zeigt die Ausgabe im Terminal meines lokalen Systems an.

Sie können den Befehl auch wie unten in Anführungszeichen setzen.

$ ssh [email protected] "uname -a"

Oder,

$ ssh [email protected] 'uname -a'

Wenn Sie den Standardport des SSH-Protokolls geändert haben , erwähnen Sie es einfach mit -p Parameter wie unten.

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

Führen Sie mehrere Befehle auf Remote-Systemen über SSH aus

Sie können auch mehrere Befehle auf der Fernbedienung ausführen, indem Sie sie wie unten in Anführungszeichen setzen.

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

Oder,

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

Die obigen Befehle zeigen die Kernel-Version und die Verteilungsdetails meines Ubuntu-Servers an.

Beispielausgabe:

Führen Sie mehrere Befehle auf Remote-Systemen über SSH unter Linux aus

Als einer unserer im Kommentarbereich unten erwähnten Leser sollten Sie mehrere Befehle in Anführungszeichen angeben. Wenn Sie keine Anführungszeichen verwenden, wird der erste Befehl auf dem Remotesystem ausgeführt und der zweite Befehl wird nur auf dem lokalen Computer ausgewertet. Der gesamte Befehl in Anführungszeichen wird wie beabsichtigt remote verarbeitet.

Hinweis: Kennen Sie den Unterschied zwischen “&&” und “;” Operatoren zwischen Befehlen:

Der “&&” Operator führt den zweiten Befehl nur aus, wenn der erste Befehl erfolgreich war.

Beispiel:

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

Im obigen Fall ist der zweite Befehl (sudo apt-get upgrade ) wird ausgeführt, wenn der erste Befehl erfolgreich war. Andernfalls wird es nicht ausgeführt.

Der “;” Operator führt den zweiten Befehl aus, selbst wenn der erste Befehl erfolgreich war oder fehlgeschlagen ist.

Beispiel:

sudo apt-get update ; sudo apt-get upgrade

Im obigen Fall ist der zweite Befehl (sudo apt-get upgrade ) wird auch dann ausgeführt, wenn der erste Befehl fehlschlägt.

Führen Sie Befehle mit "sudo"-Berechtigungen auf Remote-Systemen über SSH aus

Einige Befehle erfordern "sudo" Privilegien auszuführen. Beispielsweise installiert der folgende Befehl Vim auf meinem Remote-System.

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

Beispielausgabe:

Führen Sie Befehle mit "sudo"-Privilegien auf Remote-Systemen über SSH

aus

Hast du bemerkt? Ich habe -t verwendet Flag im obigen Befehl. Wir müssen dieses -t erwähnen Flag, um eine pseudoterminale Zuordnung zu erzwingen. Dies kann verwendet werden, um beliebige bildschirmbasierte Programme auf einem entfernten Computer auszuführen, was sehr nützlich sein kann, z. bei der Implementierung von Menüdiensten.

Außerdem habe ich das Passwort zweimal eingegeben . Beim ersten Mal habe ich das Passwort des Remote-Benutzers eingegeben, um von meinem lokalen System über SSH auf das Remote-System zuzugreifen, und das zweite Passwort ist erforderlich, um dem Remote-Benutzer die Berechtigung sudo zu erteilen, eine Anwendung (d. h. in diesem Fall Apache2) auf dem Remote-System zu installieren .

Lassen Sie uns mit dem Befehl prüfen, ob der Apache-Dienst ausgeführt wird:

$ 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.
verwendet wird

Ebenso können wir jeden Befehl oder jedes Skript auf einem entfernten System über SSH vom lokalen System aus ausführen.

Lokale Skripte auf Remote-Systemen über SSH ausführen

Lassen Sie uns ein einfaches Skript auf unserem lokalen System erstellen, um alle verfügbaren Informationen über den Distributionsnamen Ihres Remote-Systems, die Paketverwaltung und Basisdetails usw. anzuzeigen.

$ vi system_information.sh

Fügen Sie die folgenden Zeilen hinzu:

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

Drücken Sie ESC drücken und :wq eingeben um die Datei zu speichern und zu beenden.

Führen Sie nun dieses Skript auf Ihrem Remote-System über SSH mit folgendem Befehl aus:

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

Beispielausgabe:

[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

Wenn Sie 'bash -s' nicht angeben Im obigen Befehl erhalten Sie die Details des Remote-Systems, aber das Pseudo-Terminal wird nicht zugewiesen.

Ausgabe vom entfernten System auf dem lokalen System speichern

Dies kann nützlich sein, wenn Sie die Ausgabe eines Befehls, den Sie auf dem Remote-System ausführen, über SSH mit Ihrem Support-Team oder Kollegen teilen möchten.

Der folgende Befehl führt "du -ah" aus auf Ihrem Remote-System über SSH und speichern Sie die Ausgabe in diskusage.txt Datei in Ihrem lokalen System.

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

Sie können dann die Details der Festplattennutzung analysieren, indem Sie die Datei diskusage.txt anzeigen Datei mit cat Befehls- oder Textbetrachter.

$ 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 .

Konfigurieren Sie die SSH-Schlüssel-basierte Authentifizierung, um die Eingabe von Passwörtern zu vermeiden

Wenn Sie häufig Befehle auf Remote-Systemen ausführen, möchten Sie möglicherweise die SSH-Schlüssel-basierte Authentifizierung so konfigurieren, dass jedes Mal die Kennworteingabe übersprungen wird. Weitere Details finden Sie unter folgendem Link.

  • So konfigurieren Sie die schlüsselbasierte SSH-Authentifizierung unter Linux

Empfohlene Lektüre:

  • So setzen Sie teilweise übertragene Dateien über SSH mit Rsync fort
  • So führen Sie einen einzelnen Befehl gleichzeitig auf mehreren Remote-Systemen aus
  • DSH – Führen Sie einen Linux-Befehl auf mehreren Hosts gleichzeitig aus
  • So erstellen Sie einen SSH-Alias ​​unter Linux
  • SSLH – Verwenden Sie denselben Port für HTTPS und SSH
  • ScanSSH – Schneller SSH-Server und offener Proxy-Scanner
  • SSH in ein bestimmtes Verzeichnis unter Linux
  • SSH-Zugriff für einen bestimmten Benutzer oder eine bestimmte Gruppe in Linux zulassen oder verweigern
  • So verhindern Sie, dass die SSH-Sitzung unter Linux getrennt wird
  • So aktivieren Sie SSH auf FreeBSD
  • Vim-Tipps – Bearbeiten Sie entfernte Dateien mit Vim unter Linux

Hoffe das hilft.


Linux
  1. Senden Sie mit Terminator Befehle an mehrere SSH-Sitzungen

  2. Befehle zum Generieren von SSH-Schlüsseln in Linux

  3. 11 Nützliche „ssh“- und „scp“-Befehle unter Linux

  4. Führen Sie Befehle auf einem Remote-Rechner über PHP aus

  5. Spielen Sie Sound *auf* einem Remote-Rechner über ssh unter Ubuntu / Linux ab

SSH-Befehle in Linux mit Verwendungsbeispielen

So führen Sie SSH in ein bestimmtes Verzeichnis unter Linux aus

So konfigurieren Sie die X11-Weiterleitung mit SSH unter Linux

So führen Sie eine Remote-Linux-Sicherung mit SSH durch

Verwendung von SSH-Befehlen in Linux/Unix-Systemen

So führen Sie SSH zum Server über Linux