So führen Sie Befehle auf einem Remote-Linux-System über SSH aus

So führen Sie Befehle auf einem Remote-Linux-System über SSH aus

Manchmal müssen wir einige Befehle auf einem Remotecomputer ausführen. Wenn es sich um einen gelegentlichen Vorgang handelt, können Sie sich beim Remote-System anmelden und Befehle direkt ausführen, um dieses Ziel zu erreichen. Es wird jedoch lästig, dies jedes Mal tun zu müssen. Gibt es in diesem Fall eine bessere Lösung, um diesen lästigen Vorgang loszuwerden?

Ja, Sie können diese Vorgänge von Ihrem lokalen System aus ausführen, ohne sich beim Remote-System anzumelden. Hat das irgendwelche Vorteile? Ohne Zweifel. Dadurch sparen Sie jede Menge Zeit.

Wie wird das erreicht? Mit SSH können Sie Befehle auf einem Remotecomputer ausführen, ohne sich dort anzumelden.

Die allgemeine Syntax lautet wie folgt:

$ ssh [Benutzername]@[Remote-Hostname oder IP] [Befehl oder Skript]

1) So führen Sie Befehle auf einem Remote-Linux-System über SSH aus

Das folgende Beispiel ermöglicht dem Benutzer, den Befehl df auf einem Remote-Linux-Computer über SSH auszuführen.

$ ssh [email protected] df -h
 Verwendete Dateisystemgröße Verfügbare Nutzung% Eingebunden auf
 /dev/mapper/centos-root 27 G 4,4 G 23 G 17 % /
 devtmpfs 903M 0 903M 0 % /Entwickler
 tmpfs 920M 0 920M 0 % /Entwickler/shm
 tmpfs 920 M 9,3 M 910 M 2 % /Lauf
 tmpfs 920M 0 920M 0 % /sys/fs/cgroup
 /dev/sda1 1014M 179M 836M 18 % /boot
 tmpfs 184 M 8,0 K 184 M 1 % /run/Benutzer/42
 tmpfs 184M 0 184M 0 % /run/Benutzer/1000

2) So führen Sie mehrere Befehle auf einem Remote-Linux-System über SSH aus

Das folgende Beispiel ermöglicht dem Benutzer, mehrere Befehle gleichzeitig über SSH auf einem Remote-Linux-Computer auszuführen.

Führen Sie die Befehle „uptime“ und „free“ gleichzeitig auf dem Remote-Linux-System aus.

$ ssh [email protected] "uptime && free -m"
 23:05:10, 10 Min. aktiv, 0 Benutzer, durchschnittliche Auslastung: 0,00, 0,03, 0,03
       insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
 Mitglied: 1878 432 1445 1 100 134
 -/+ Puffer/Cache: 197 1680
 Tausch: 3071 0 3071

3) So führen Sie Befehle mit Sudo-Berechtigungen auf einem Remote-Linux-System über SSH aus

Das folgende Beispiel ermöglicht dem Benutzer, den Befehl fdisk mit Sudo-Berechtigungen auf einem Remote-Linux-Computer über SSH auszuführen.

Normalen Benutzern ist es nicht gestattet, Befehle auszuführen, die im Binärverzeichnis des Systems (/usr/sbin/) bereitgestellt werden. Benutzer benötigen Root-Rechte, um es auszuführen.

Sie benötigen also Root-Rechte, um den Befehl fdisk auf Ihrem Linux-System auszuführen. Der Befehl „which“ gibt den vollständigen ausführbaren Pfad für einen bestimmten Befehl zurück.

$ welches fdisk
 /usr/sbin/fdisk
$ ssh -t [email protected] "sudo fdisk -l"
 [sudo] Passwort für Daygeek:
 Datenträger /dev/sda: 32,2 GB, 32212254720 Bytes, 62914560 Sektoren
 Einheiten = Sektoren von 1 * 512 = 512 Bytes
 Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes
 I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes
 Datenträgerbezeichnungstyp: dos
 Datenträgerkennung: 0x000bf685
 Gerät Booten Start Ende Blöcke Id System
 /dev/sda1 * 2048 2099199 1048576 83 Linux
 /dev/sda2 2099200 62914559 30407680 8e Linux LVM
 Datenträger /dev/sdb: 10,7 GB, 10737418240 Bytes, 20971520 Sektoren
 Einheiten = Sektoren von 1 * 512 = 512 Bytes
 Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes
 I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes
 Datenträger /dev/mapper/centos-root: 29,0 GB, 28982640640 Bytes, 56606720 Sektoren
 Einheiten = Sektoren von 1 * 512 = 512 Bytes
 Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes
 I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes
 Datenträger /dev/mapper/centos-swap: 2147 MB, 2147483648 Bytes, 4194304 Sektoren
 Einheiten = Sektoren von 1 * 512 = 512 Bytes
 Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes
 I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes
 Verbindung zu centos7.2daygeek.com geschlossen.

4) So führen Sie Service-Control-Befehle mit Sudo-Berechtigungen auf einem Remote-Linux-System über SSH aus

Das folgende Beispiel ermöglicht dem Benutzer, Service-Control-Befehle mit Sudo-Berechtigungen auf einem Remote-Linux-Computer über SSH auszuführen.

$ ssh -t [email protected] "sudo systemctl restart httpd"
 [sudo] Passwort für Daygeek:
 Verbindung zu centos7.2daygeek.com geschlossen.

5) So führen Sie Befehle auf einem Remote-Linux-System über SSH über einen nicht standardmäßigen Port aus

Das folgende Beispiel ermöglicht dem Benutzer, den Befehl hostnamectl auf einem Remote-Linux-Computer über einen nicht standardmäßigen Port über SSH auszuführen.

$ ssh -p 2200 [email protected] hostnamectl
  Statischer Hostname: Ubuntu18.2daygeek.com
     Symbolname: Computer-VM
      Gehäuse: vm
     Maschinen-ID: 27f6c2febda84dc881f28fd145077187
      Boot-ID: bbeccdf932be41ddb5deae9e5f15183d
   Virtualisierung: Oracle
  Betriebssystem: Ubuntu 18.04.2 LTS
       Kernel: Linux 4.15.0-60-generic
    Architektur: x86-64

6) So speichern Sie die Ausgabe des Remote-Systems auf dem lokalen System

Das folgende Beispiel ermöglicht dem Benutzer, den Top-Befehl auf einem Remote-Linux-Computer über SSH auszuführen und die Ausgabe auf dem lokalen System zu speichern.

$ ssh [email protected] "top -bc | head -n 35" > /tmp/top-output.txt
Katze /tmp/top-output.txt
 oben – 01:13:11, 18 Min. aktiv, 1 Benutzer, durchschnittliche Auslastung: 0,01, 0,05, 0,10
 Aufgaben: 168 insgesamt, 1 läuft, 167 schläft, 0 angehalten, 0 Zombie
 % CPU(s): 0,0 us, 6,2 sy, 0,0 ni, 93,8 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
 KiB-Speicher: 1882300 gesamt, 1176324 frei, 342392 verwendet, 363584 Buff/Cache
 KiB-Austausch: 2097148 insgesamt, 2097148 frei, 0 verwendet. 1348140 verfügbare Mem
 PID USER PR NI VIRT RES SHR S %CPU %MEM ZEIT+ BEFEHL
 4943 daygeek 20 0 162052 2248 1612 R 10,0 0,1 0:00.07 oben -bc
   1 Wurzel 20 0 128276 6936 4204 S 0,0 0,4 0:03.08 /usr/lib/sy+
   2 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00.00 [kthreadd]
   3 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00,25 [ksoftirqd/+
   4 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00.00 [kworker/0:+
   5 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00.00 [kworker/0:+
   7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 [migration/+
   8 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00.00 [rcu_bh]
   9 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00,77 [rcu_sched]
  10 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00,00 [lru-add-dr+
  11 root rt 0 0 0 0 S 0,0 0,0 0:00.01 [watchdog/0]
  13 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00.00 [kdevtmpfs]
  14 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00.00 [netns]
  15 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00,00 [khungtaskd]
  16 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00.00 [Rückschreiben]
  17 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00,00 [kintegrity+
  18 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00.00 [Bioset]
  19 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00.00 [Bioset]
  20 Wurzel 0 -20 0 0 0 S 0,0 0,0 0:00.00 [Bioset]

Alternativ können Sie das folgende Format verwenden, um mehrere Befehle auf dem Remote-System auszuführen:

$ ssh [email protected] << EOF
hostnamectl
frei -m
grep daygeek /etc/passwd
Ende der Laufzeit

Die Ausgabe des obigen Befehls lautet wie folgt:

Es wird kein Pseudoterminal zugewiesen, da stdin kein Terminal ist.
  Statischer Hostname: CentOS7.2daygeek.com
     Symbolname: Computer-VM
      Gehäuse: vm
     Maschinen-ID: 002f47b82af248f5be1d67b67e03514c
      Boot-ID: dca9a1ba06374d7d96678f9461752482
   Virtualisierung: kvm
  Betriebssystem: CentOS Linux 7 (Core)
    CPE-Betriebssystemname: cpe:/o:centos:centos:7
       Kernel: Linux 3.10.0-957.el7.x86_64
    Architektur: x86-64
        insgesamt genutzter freier gemeinsamer Buff/Cache verfügbar
 Mitglied: 1838 335 1146 11 355 1314
 Tausch: 2047 0 2047
 daygeek:x:1000:1000:2daygeek:/home/daygeek:/bin/bash

7) So führen Sie lokale Bash-Skripte auf Remote-Systemen aus

Das folgende Beispiel ermöglicht dem Benutzer, das lokale Bash-Skript remote-test.sh über SSH auf einem Remote-Linux-Computer auszuführen.

Erstellen Sie ein Shell-Skript und führen Sie es aus.

$ vi /tmp/remote-test.sh
#!/bin/bash
#Name: remote-test.sh
#--------------------
 Betriebszeit
 frei -m
 df -h
 uname -a
 hostnamectl

Die Ausgabe des obigen Befehls lautet wie folgt:

$ ssh [email protected] 'bash -s' < /tmp/remote-test.sh
 01:17:09, 22 Min. aktiv, 1 Benutzer, durchschnittliche Auslastung: 0,00, 0,02, 0,08
        insgesamt genutzter freier gemeinsamer Buff/Cache verfügbar
 Mitglied: 1838 333 1148 11 355 1316
 Tausch: 2047 0 2047
 Verwendete Dateisystemgröße Verfügbare Nutzung% Eingebunden auf
 /dev/mapper/centos-root 27 G 4,4 G 23 G 17 % /
 devtmpfs 903M 0 903M 0 % /Entwickler
 tmpfs 920M 0 920M 0 % /Entwickler/shm
 tmpfs 920 M 9,3 M 910 M 2 % /Lauf
 tmpfs 920M 0 920M 0 % /sys/fs/cgroup
 /dev/sda1 1014M 179M 836M 18 % /boot
 tmpfs 184 M 12 K 184 M 1 % /run/Benutzer/42
 tmpfs 184M 0 184M 0 % /run/Benutzer/1000
 Linux CentOS7.2daygeek.com 3.10.0-957.el7.x86_64 #1 SMP Do Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  Statischer Hostname: CentOS7.2daygeek.com
     Symbolname: Computer-VM
      Gehäuse: vm
     Maschinen-ID: 002f47b82af248f5be1d67b67e03514c
      Boot-ID: dca9a1ba06374d7d96678f9461752482
   Virtualisierung: kvm
  Betriebssystem: CentOS Linux 7 (Core)
    CPE-Betriebssystemname: cpe:/o:centos:centos:7
       Kernel: Linux 3.10.0-957.el7.x86_64
    Architektur: x86-64

Alternativ können Sie Rohre verwenden. Wenn Sie der Meinung sind, dass das Ergebnis nicht schön ist, nehmen Sie einige Änderungen vor, um es eleganter zu gestalten.

$ vi /tmp/remote-test-1.sh
#!/bin/bash
#Name: remote-test.sh
 echo "---------Systembetriebszeit--------------------------------------------"
 Betriebszeit
 echo -e "\n"
 echo "---------Speichernutzung---------------------------------------------"
 frei -m
 echo -e "\n"
 echo "---------Datenträgernutzung-----------------------------------------------"
 df -h
 echo -e "\n"
 echo "---------Kernelversion-------------------------------------------"
 uname -a
 echo -e "\n"
 echo "---------HostName-Info--------------------------------------------"
 hostnamectl
 Echo "-----------------------------------------------------------------"

Die Ausgabe des obigen Skripts lautet wie folgt:

$ cat /tmp/remote-test.sh | ssh [email protected]
 Es wird kein Pseudoterminal zugewiesen, da stdin kein Terminal ist.
 ---------Systemverfügbarkeit--------------------------------------------
 03:14:09, 2:19 Uhr, 1 Benutzer, durchschnittliche Auslastung: 0,00, 0,01, 0,05
 ---------Speichernutzung-----------------------------------------
        insgesamt genutzter freier gemeinsamer Buff/Cache verfügbar
 Mitglied: 1838 376 1063 11 398 1253
 Tausch: 2047 0 2047
 ---------Datenträgernutzung-------------------------------------------
 Verwendete Dateisystemgröße Verfügbare Nutzung% Eingebunden auf
 /dev/mapper/centos-root 27 G 4,4 G 23 G 17 % /
 devtmpfs 903M 0 903M 0 % /Entwickler
 tmpfs 920M 0 920M 0 % /Entwickler/shm
 tmpfs 920 M 9,3 M 910 M 2 % /Lauf
 tmpfs 920M 0 920M 0 % /sys/fs/cgroup
 /dev/sda1 1014M 179M 836M 18 % /boot
 tmpfs 184 M 12 K 184 M 1 % /run/Benutzer/42
 tmpfs 184M 0 184M 0 % /run/Benutzer/1000
 tmpfs 184M 0 184M 0 % /run/Benutzer/0
 ---------Kernel-Version------------------------------------------
 Linux CentOS7.2daygeek.com 3.10.0-957.el7.x86_64 #1 SMP Do Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
 ---------HostName-Informationen--------------------------------------------
  Statischer Hostname: CentOS7.2daygeek.com
     Symbolname: Computer-VM
      Gehäuse: vm
     Maschinen-ID: 002f47b82af248f5be1d67b67e03514c
      Boot-ID: dca9a1ba06374d7d96678f9461752482
   Virtualisierung: kvm
  Betriebssystem: CentOS Linux 7 (Core)
    CPE-Betriebssystemname: cpe:/o:centos:centos:7
       Kernel: Linux 3.10.0-957.el7.x86_64
    Architektur: x86-64

8) So führen Sie mehrere Befehle gleichzeitig auf mehreren Remote-Systemen aus

Das folgende Bash-Skript ermöglicht dem Benutzer, mehrere Befehle gleichzeitig auf mehreren Remote-Systemen auszuführen. Implementiert mit einer einfachen For-Schleife.

Um dies zu erreichen, können Sie den Befehl PSSH, den Befehl ClusterShell oder den Befehl DSH ausprobieren.

$ vi /tmp/multiple-host.sh
 für Host in CentOS7.2daygeek.com CentOS6.2daygeek.com
 Tun
  ssh daygeek@${host} "uname -a;uptime;date;w"
 Erledigt

Die Ausgabe des obigen Skripts lautet wie folgt:

$ sh mehrere-host.sh
 Linux CentOS7.2daygeek.com 3.10.0-957.el7.x86_64 #1 SMP Do Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
 01:33:57, 39 Minuten aktiv, 1 Benutzer, durchschnittliche Auslastung: 0,07, 0,06, 0,06
 Mittwoch, 25. September 2019, 01:33:57 CDT
 01:33:57, 39 Minuten aktiv, 1 Benutzer, durchschnittliche Auslastung: 0,07, 0,06, 0,06
 BENUTZER TTY VON [email protected] IDLE JCPU PCPU WAS
 daygeek pts/0 192.168.1.6 01:08 23:25 0,06 s 0,06 s -bash
 Linux CentOS6.2daygeek.com 2.6.32-754.el6.x86_64 #1 SMP Dienstag, 19. Juni 2018, 21:26:04 UTC x86_64 x86_64 x86_64 GNU/Linux
 23:33:58, 39 Minuten aktiv, 0 Benutzer, durchschnittliche Auslastung: 0,00, 0,00, 0,00
 Dienstag, 24. September 2019, 23:33:58 MST
 23:33:58, 39 Minuten aktiv, 0 Benutzer, durchschnittliche Auslastung: 0,00, 0,00, 0,00
 BENUTZER TTY VON [email protected] IDLE JCPU PCPU WAS

9) So fügen Sie mit dem Befehl sshpass ein Passwort hinzu

Wenn Sie es mühsam finden, jedes Mal Ihr Passwort einzugeben, schlage ich vor, dass Sie eine der folgenden Methoden wählen, um dieses Problem entsprechend Ihren Anforderungen zu lösen.

Wenn Sie häufig ähnliche Vorgänge durchführen, empfehle ich die Einrichtung einer kennwortfreien Authentifizierung, da dies eine standardmäßige und dauerhafte Lösung ist.

Wenn Sie diese Aufgaben nur ein paar Mal im Monat ausführen, empfehle ich die Verwendung des Tools „sshpass“. Geben Sie Ihr Passwort einfach mit der Option -p ein.

$ sshpass -p 'Geben Sie hier Ihr Passwort ein' ssh -p 2200 [email protected] ip a
 1: lo: mtu 65536 qdisc noqueue Status UNBEKANNT Gruppe Standard qlen 1
   Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 Bereich Host lo
    valid_lft für immer preferred_lft für immer
   inet6 ::1/128 Bereich Host
    valid_lft für immer preferred_lft für immer
 2: eth0: mtu 1500 qdisc pfifo_fast Status UP-Gruppe Standard qlen 1000
   Link/Ether 08:00:27:18:90:7f brd ff:ff:ff:ff:ff:ff:ff
   inet 192.168.1.12/24 brd 192.168.1.255 Bereich global dynamisch eth0
    valid_lft 86145 Sek. bevorzugt_lft 86145 Sek.
   inet6 fe80::a00:27ff:fe18:907f/64 Bereichslink vorläufig dadfailed
    valid_lft für immer preferred_lft für immer

Zusammenfassen

Oben ist die Methode, die ich Ihnen vorgestellt habe, um Befehle auf einem Remote-Linux-System über SSH auszuführen. Ich hoffe, sie wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Anfänger lernen Linux-Befehle: SSH-Befehl (Remote-Login)
  • Verwenden Sie SSH, um Befehle in Linux remote auszuführen und Datenbanken stapelweise ins lokale System zu exportieren.
  • Detaillierte Erläuterung der SSHD-Dienste und Dienstverwaltungsbefehle unter Linux
  • Erwarteter Befehl zum Ausführen eines Batch-SSH ohne Kennwort unter Linux
  • Detaillierte Erläuterung der SSH-Installation und der Verwendung des SCP-Befehls unter Linux
  • Beispiel für das Ausführen von Linux-Befehlen in PHP und Starten des SSH-Dienstes
  • Zusammenfassung gängiger SSH-Befehle unter Linux VPS

<<:  Lombok-Implementierung JSR-269

>>:  Analyse, wie eine gespeicherte Prozedur in MySQL erstellt wird, um einer Datentabelle neue Felder hinzuzufügen

Artikel empfehlen

So führen Sie den Top-Befehl im Batchmodus aus

Der Befehl „top“ ist der beste Befehl, den jeder ...

MySQL verwendet UNIQUE, um das Einfügen nicht doppelter Daten zu implementieren

SQL UNIQUE-Einschränkung Die UNIQUE-Einschränkung...

Einführung in die Cloud-native-Technologie Kubernetes (K8S)

Inhaltsverzeichnis 01 Was ist Kubernetes? 02 Der ...

Docker startet Redis und legt das Passwort fest

Redis verwendet das Apline-Image (Alps) von Redis...

MySQL-Replikation - ausführliche Erklärung und einfaches Beispiel

MySQL-Replikation - ausführliche Erklärung und ei...

Neue Ideen zur Zeitformatierung in JavaScript toLocaleString()

Inhaltsverzeichnis 1. Konventionelle Ideen zur Ze...

Detaillierte Erklärung von Objektliteralen in JS

Inhaltsverzeichnis Vorwort 1. Setzen Sie den Prot...

Detaillierte Erklärung der MySQL-Binlog-Verwendung

binlog ist eine binäre Protokolldatei, die alle D...

So importieren/speichern/laden/löschen Sie Bilder lokal in Docker

1. Docker importiert lokale Images Manchmal kopie...

Lösung für das Problem mit verstümmelten chinesischen MySQL-Zeichen

1. Die chinesischen verstümmelten Zeichen erschei...

Detaillierte Analyse des Explain-Ausführungsplans in MySQL

Vorwort Das Schreiben effizienter SQL-Anweisungen...