[Anmerkung des Herausgebers, 29. November 2021:Alle Beispiele für die Angabe eines Passworts in der Befehlszeile beinhalten das Risiko, dass das Passwort im Shell-Verlauf des Benutzers erfasst wird (falls unterstützt) oder für alle Systembenutzer in der Prozessliste sichtbar ist. Sicherheitsexperten empfehlen, alle Dateien zu löschen und Shell-Protokolle zu löschen.]
Das Verbinden und Übertragen von Dateien an entfernte Systeme ist etwas, was Systemadministratoren ständig tun. Ein wichtiges Tool, das von vielen Systemadministratoren auf Linux-Plattformen verwendet wird, ist SSH. SSH unterstützt zwei Formen der Authentifizierung:
- Passwortauthentifizierung
- Public-Key-Authentifizierung
Die Public-Key-Authentifizierung gilt als die sicherste Form dieser beiden Methoden, obwohl die Passwortauthentifizierung die beliebteste und einfachste ist. Bei der Passwortauthentifizierung wird der Benutzer jedoch immer aufgefordert, das Passwort einzugeben. Diese Wiederholung ist mühsam. Darüber hinaus erfordert SSH auch manuelle Eingriffe, wenn es in einem Shell-Skript verwendet wird. Wenn bei der Verwendung der SSH-Passwortauthentifizierung eine Automatisierung erforderlich ist, dann ein einfaches Tool namens sshpass
ist unverzichtbar.
Was ist sshpass?
Der sshpass
Dienstprogramm wurde entwickelt, um SSH mit keyboard-interactive auszuführen Passwort-Authentifizierungsmodus, aber nicht interaktiv.
SSH verwendet den direkten TTY-Zugriff, um sicherzustellen, dass das Passwort tatsächlich von einem interaktiven Tastaturbenutzer ausgegeben wird. sshpass
führt SSH in einem dedizierten TTY aus und täuscht SSH vor, dass es das Passwort von einem interaktiven Benutzer erhält.
sshpass installieren
Sie können sshpass
installieren mit diesem einfachen Befehl:
# yum install sshpass
Verwenden Sie sshpass
Geben Sie den Befehl an, den Sie nach sshpass
ausführen möchten Optionen. Normalerweise lautet der Befehl ssh
mit Argumenten, es kann aber auch jeder andere Befehl sein. Die SSH-Passwortabfrage ist jedoch derzeit in sshpass
fest codiert .
Die Zusammenfassung für den sshpass
Befehl wird unten beschrieben:
sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
Wo:
-ppassword
The password is given on the command line.
-ffilename
The password is the first line of the file filename.
-dnumber
number is a file descriptor inherited by sshpass from the runner. The password is read from the open file descriptor.
-e
The password is taken from the environment variable "SSHPASS".
Beispiele
Um den Wert und die Verwendung von sshpass
besser zu verstehen , schauen wir uns einige Beispiele mit verschiedenen Dienstprogrammen an, darunter SSH, Rsync, Scp und GPG.
Beispiel 1:SSH
Verwenden Sie sshpass
um sich mit SSH bei einem Remote-Server anzumelden. Nehmen wir an, das Passwort ist !4u2tryhack
. Nachfolgend finden Sie verschiedene Möglichkeiten, die sshpass-Optionen zu verwenden.
A. Verwenden Sie den -p
(Dies gilt als die am wenigsten sichere Wahl und sollte nicht verwendet werden):
$ sshpass -p !4u2tryhack ssh username@host.example.com
Das -p
Die Option sieht folgendermaßen aus, wenn sie in einem Shell-Skript verwendet wird:
$ sshpass -p !4u2tryhack ssh -o StrictHostKeyChecking=no username@host.example.com
B. Verwenden Sie das -f
Option (das Passwort sollte die erste Zeile des Dateinamens sein):
$ echo '!4u2tryhack' >pass_file
$ chmod 0400 pass_file
$ sshpass -f pass_file ssh username@host.example.com
Die $ chmod 0400 pass_file
ist entscheidend für die Gewährleistung der Sicherheit der Kennwortdatei. Die Standard-Umask auf RHEL ist 033, was eine weltweite Lesbarkeit der Datei ermöglichen würde.
Hier ist das -f
Option bei Verwendung im Shell-Skript:
$ sshpass -f pass_file ssh -o StrictHostKeyChecking=no username@host.example.com
C. Verwenden Sie das -e
Option (das Passwort sollte die erste Zeile des Dateinamens sein):
$ SSHPASS='!4u2tryhack' sshpass -e ssh username@host.example.com
Das -e
Option sieht bei Verwendung in Shell-Skript so aus:
$ SSHPASS='!4u2tryhack' sshpass -e ssh -o StrictHostKeyChecking=no username@host.example.com
Beispiel 2:Rsync
Verwenden Sie sshpass
mit rsync
:
$ SSHPASS='!4u2tryhack' rsync --rsh="sshpass -e ssh -l username" /custom/ host.example.com:/opt/custom/
Oben wird das -e
verwendet Option, die das Passwort an die Umgebungsvariable SSHPASS übergibt
Wir können das -f
verwenden wie folgt umschalten:
$ rsync --rsh="sshpass -f pass_file ssh -l username" /custom/ host.example.com:/opt/custom/
Beispiel 3:Scp
Verwenden Sie sshpass
mit scp:
$ scp -r /var/www/html/example.com --rsh="sshpass -f pass_file ssh -l user" host.example.com:/var/www/html
Beispiel 4:GPG
Sie können auch sshpass
verwenden mit einer GPG-verschlüsselten Datei. Wenn das -f
switch verwendet wird, ist die Referenzdatei im Klartext. Mal sehen, wie wir eine Datei mit GPG verschlüsseln und verwenden können.
Erstellen Sie zuerst eine Datei wie folgt:
$ echo '!4u2tryhack' > .sshpasswd
Als nächstes verschlüsseln Sie die Datei mit gpg
Befehl:
$ gpg -c .sshpasswd
Entfernen Sie die Datei, die den Klartext enthält:
$ rm .sshpasswd
Verwenden Sie es schließlich wie folgt:
$ gpg -d -q .sshpasswd.gpg | sshpass ssh user@srv1.example.com
Abschluss
sshpass
ist ein einfaches Tool, das Systemadministratoren eine große Hilfe sein kann. Dies überschreibt keineswegs die sicherste Form der SSH-Authentifizierung, nämlich die Public-Key-Authentifizierung. Allerdings sshpass
kann auch zur Sysadmin-Toolbox hinzugefügt werden.
[ Kostenloser Online-Kurs:Technischer Überblick zu Red Hat Enterprise Linux. ]