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 daygeek@CentOS7.2daygeek.com 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 daygeek@CentOS7.2daygeek.com "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 daygeek@CentOS7.2daygeek.com "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 daygeek@CentOS7.2daygeek.com "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 daygeek@CentOS7.2daygeek.com 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 daygeek@CentOS7.2daygeek.com "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 daygeek@CentOS7.2daygeek.com << 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 daygeek@CentOS7.2daygeek.com '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 daygeek@CentOS7.2daygeek.com
 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 daygeek@CentOS7.2daygeek.com 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 daygeek@CentOS7.2daygeek.com 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 daygeek@CentOS7.2daygeek.com 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

Detaillierte Schritte zum Bereitstellen von lnmp unter Docker

Inhaltsverzeichnis Ziehen Sie ein CentOS-Image Ge...

Html+CSS-Zeichnungsdreiecksymbol

Schauen wir uns zunächst die Renderings an: XML/H...

CocosCreator implementiert Skill-Kühleffekt

CocosCreator realisiert Skill-CD-Effekt In vielen...

Front-End-JavaScript-Housekeeper-Paket.json

Inhaltsverzeichnis 1. Erforderliche Attribute 1. ...

Detailliertes Beispiel für die Datenmigration bei einem IOS-Datenbank-Upgrade

Detailliertes Beispiel für die Datenmigration bei...

Skin-Change-Lösung basierend auf Vue kombiniert mit ElementUI

Inhaltsverzeichnis Vorne geschrieben Lösung 1: Gl...

Docker-Overlay realisiert die Container-Kommunikation zwischen Hosts

Inhaltsverzeichnis 1. Docker-Konfiguration 2. Ers...

So ändern Sie das MySQL-Passwort unter Centos

1. MySQL-Anmeldeeinstellungen ändern: # vim /etc/...

Lösungen für das Problem der Erstellung von XHTML- und CSS-Webseiten

Die Lösungen für die Probleme, die bei der Erstell...