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.