Übersicht
Oft müssen wir mit Remote-Linux-Systemen arbeiten. Wir melden uns beim Remote-Host an, führen Arbeiten aus und beenden diese Sitzung. Können wir all diese Aktionen von einem lokalen Computer aus ausführen? Ja, es ist möglich und dieses Tutorial demonstriert es mit ausführlichen Beispielen.
Befehlsausführung über SSH
Mit SSH können wir Befehle auf einem Remote-Computer ausführen, ohne uns bei diesem Computer anzumelden. In diesem Tutorial besprechen wir verschiedene Möglichkeiten, dies zu erreichen.
Einzelbefehl ausführen
Lassen Sie uns den Befehl uname über SSH ausführen.
$ ssh [email protected] uname
Wenn Sie den obigen Befehl beobachten, ähnelt er dem normalen SSH-Befehl mit geringfügigen Unterschieden. Wir haben den auszuführenden Befehl angehängt (in roter Farbe hervorgehoben).
Wenn wir diesen Befehl ausführen. Es wird die folgende Ausgabe generiert:
Linux
Mehrere Befehle ausführen
Mit dieser Technik können wir mehrere Befehle mit einer einzigen SSH-Sitzung ausführen. Wir müssen nur Befehle mit Semikolon (;) trennen.
$ ssh [email protected] "uname;hostname;date"
Wie erwartet erzeugen diese Befehle die folgende Ausgabe:
Linux linux-server Thu Mar 1 15:47:59 IST 2018
Befehl mit erhöhten Rechten ausführen
Manchmal müssen wir Befehle mit erhöhten Rechten ausführen, in diesem Fall können wir sie mit sudo verwenden.
$ ssh -t [email protected] sudo touch /etc/banner.txt
Beachten Sie, dass wir ‘-t verwendet haben ‘-Option mit SSH, die eine Pseudo-Terminal-Zuweisung ermöglicht. Der Befehl sudo erfordert ein interaktives Terminal, daher ist diese Option erforderlich.
Skript ausführen
Die Fernausführung ist nicht nur auf die Befehle beschränkt; Wir können sogar Skripte über SSH ausführen. Wir müssen nur den absoluten Pfad des lokalen Skripts zum SSH-Befehl angeben.
Lassen Sie uns ein einfaches Shell-Skript mit folgendem Inhalt erstellen und es als system-info.sh
benennen#!/bin/sh uname hostname
Machen Sie das Skript ausführbar und führen Sie es wie folgt auf dem Remote-Server aus:
$ chmod +x system-info.sh $ ssh [email protected] ./system-info.sh
Wie einige von Ihnen vielleicht erraten haben, wird die folgende Ausgabe generiert:
Linux linux-server
Variablenerweiterungsproblem
Wenn wir Befehle in mehrere Zeilen aufteilen, funktioniert die Variablenerweiterung nicht. Lassen Sie es uns anhand eines einfachen Beispiels sehen:
$ msg="Hello LinuxTechi" $ ssh [email protected] 'echo $msg'
Wenn wir den obigen Befehl ausführen, können wir beobachten, dass die Variable nicht erweitert wird.
Um dieses Problem zu lösen, müssen wir -c verwenden Option der Schale. In unserem Fall verwenden wir es mit bash wie folgt:
$ ssh [email protected] bash -c "'echo $msg'"
Passwortlose SSH-Sitzung konfigurieren
Standardmäßig fragt SSH jedes Mal nach einer Passwortauthentifizierung. Dies wird aus Sicherheitsgründen erzwungen. Allerdings ist es manchmal nervig. Um dies zu umgehen, können wir einen Public-Private-Key-Authentifizierungsmechanismus verwenden.
Es kann mit den folgenden Schritten konfiguriert werden:
1) Generieren Sie ein öffentlich-privates Schlüsselpaar
SSH bietet das Dienstprogramm ssh-keygen, mit dem Schlüsselpaare auf dem lokalen Computer generiert werden können.
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/linuxtechi/.ssh/id_rsa): #press enter Enter passphrase (empty for no passphrase): #press enter Enter same passphrase again: #press enter Your identification has been saved in /home/linuxtechi/.ssh/id_rsa. Your public key has been saved in /home/linuxtechi/.ssh/id_rsa.pub.
Die obige Ausgabe zeigt, dass generierte Schlüsselpaare im Verzeichnis ~/.ssh gespeichert werden.
2) Öffentlichen Schlüssel zur Datei ~/.ssh/authorized_keys auf dem Remote-Host hinzufügen
Der einfache Weg, dies zu tun, ist die Verwendung des Befehls ssh-copy-id.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Im obigen Befehl:
- -i-Option gibt Identitätsdatei an
- ~/.ssh/id_rsa.pub ist eine Identitätsdatei
- der verbleibende Text ist Remote-Benutzer und Remote-Server-IP
HINWEIS: Geben Sie niemals Ihren privaten Schlüssel an Dritte weiter.
3) Das ist es. Ist es nicht so einfach? Jetzt können wir den Befehl über SSH ausführen, ohne ein Passwort einzugeben. Lassen Sie uns das überprüfen.
$ ssh [email protected] uname
Einschränkung der Public-Private-Key-Authentifizierung
Obwohl die Public-Private-Key-Authentifizierung unser Leben einfacher macht, ist sie nicht perfekt. Sein größter Nachteil ist; Wir können es nicht automatisieren, da eine Benutzerinteraktion beim ersten Mal erforderlich ist. Erinnern !!! Wir haben das Passwort für den Befehl ssh-copy-id angegeben.
Es besteht kein Grund zur Panik, dies ist kein Weltuntergang. Im nächsten Abschnitt werden wir einen Ansatz diskutieren, der diese Einschränkung beseitigt.
Dienstprogramm sshpass
Um die obige Einschränkung zu überwinden, können wir das Dienstprogramm sshpass verwenden. Es bietet eine nicht interaktive Möglichkeit zur Authentifizierung der SSH-Sitzung. In diesem Abschnitt werden verschiedene Möglichkeiten erläutert.
Installation von sshpass
Das Dienstprogramm sshpass ist Teil des offiziellen Repositorys von Ubuntu. Wir können es mit den folgenden Befehlen installieren:
$ sudo apt-get update $ sudo apt-get install sshpass
Beispiele
sshpass kann ein Passwort akzeptieren – als Argument, es aus einer Datei oder über eine Umgebungsvariable lesen. Lassen Sie uns all diese Ansätze diskutieren.
1) Passwort als Argument
Wir können das Passwort als Argument mit der Option –p angeben:
$ sshpass -p 'secrete-password' ssh [email protected] uname
2) Passwort aus Datei
sshpass kann mit der Option -f das Passwort aus einer regulären Datei lesen:
$ echo "secrete-password" > password-file $ sshpass -f password-file ssh [email protected] uname
3) Passwort aus Umgebungsvariable
Darüber hinaus können wir das Passwort aus der Umgebungsvariable mit der Option -e bereitstellen:
$ export SSHPASS="secrete-password" $ sshpass -e ssh [email protected] uname
Schlussfolgerung
Dieses Tutorial zeigt verschiedene Tricks und Tipps zur Remote-Befehlsausführung über SSH. Sobald Sie diese Tricks verstanden haben, wird es Ihr Leben viel einfacher machen und Ihre Produktivität definitiv verbessern.
Lesen Sie auch : 9 „diff“-Befehlsbeispiele in Linux