GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Ü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


Linux
  1. So bringen Sie Ihr System zum Absturz:Gefährliche Linux-Befehle

  2. So überprüfen Sie den offenen Port auf einem Remote-Linux-System

  3. So verwenden Sie die Befehle strace und ltrace unter Linux

  4. Schreiben Sie ein Shell-Skript, um ssh zu einem Remote-Computer zu senden und Befehle auszuführen

  5. So führen Sie den ssh-Befehl einen sudo-Befehl ohne Passwort aus der Ferne aus

So überprüfen Sie, ob ein Port auf einem Remote-Linux-System geöffnet ist

So führen Sie eine Remote-Linux-Sicherung mit SSH durch

So mounten Sie ein Remote-Linux-Dateisystem mit SSHFS

Wie generiert und verwendet man einen SSH-Schlüssel in einem Linux-System?

So verwenden Sie SSH, um eine Verbindung zu einem Remote-Server unter Linux oder Windows herzustellen

So führen Sie .run- und .bin-Pakete im Linux-System aus