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! Das könnte Sie auch interessieren:
|
<<: Lombok-Implementierung JSR-269
Inhaltsverzeichnis 1 Probleme bei der Transaktion...
Der Befehl „top“ ist der beste Befehl, den jeder ...
SQL UNIQUE-Einschränkung Die UNIQUE-Einschränkung...
Inhaltsverzeichnis 01 Was ist Kubernetes? 02 Der ...
Redis verwendet das Apline-Image (Alps) von Redis...
MySQL-Replikation - ausführliche Erklärung und ei...
Inhaltsverzeichnis 1. Konventionelle Ideen zur Ze...
Inhaltsverzeichnis Vorwort 1. Setzen Sie den Prot...
binlog ist eine binäre Protokolldatei, die alle D...
Hinweis: Die dritte Methode wird nur in XSell ver...
1. Docker importiert lokale Images Manchmal kopie...
Inhaltsverzeichnis Vorwort 1. Kurze Analyse der z...
In Projekten kommt es häufig vor, dass eine Liste...
1. Die chinesischen verstümmelten Zeichen erschei...
Vorwort Das Schreiben effizienter SQL-Anweisungen...