Website-Suche

sshpass: ein hervorragendes Tool für nicht-interaktive SSH-Anmeldung - niemals auf Produktionsservern verwenden


In den meisten Fällen melden sich Linux-Systemadministratoren über SSH bei Linux-Remoteservern an, indem sie entweder ein Kennwort angeben oder die kennwortlose SSH-Anmeldung oder die schlüsselbasierte SSH-Authentifizierung verwenden.

Was ist, wenn Sie ein Passwort zusammen mit dem Benutzernamen an die SSH-Eingabeaufforderung selbst senden möchten? Hier kommt sshpass zur Rettung.

sshpass ist ein einfaches und leichtgewichtiges Befehlszeilentool, das es uns ermöglicht, ein Passwort (nicht-interaktive Passwortauthentifizierung) für die Eingabeaufforderung selbst bereitzustellen, so dass automatisierte Shell-Skripte ausgeführt werden können, um Backups über den Cron-Scheduler zu erstellen.

ssh verwendet direkten TTY-Zugriff, um sicherzustellen, dass das Passwort tatsächlich von einem interaktiven Tastaturbenutzer bereitgestellt wird. Sshpass führt ssh in einem dedizierten tty aus, was es in die Irre führt, zu glauben, dass es das Passwort von einem interaktiven Benutzer erhält.

Wichtig: Die Verwendung von sshpass gilt als am wenigsten sicher, da es das Passwort allen Systembenutzern auf der Kommandozeile mit einem einfachen "ps"-Befehl offenbart. Ich empfehle dringend die Verwendung der passwortlosen SSH-Authentifizierung.

Installieren Sie sshpass auf Linux-Systemen

In RedHat/CentOS-basierten Systemen müssen Sie zuerst das Epel-Repository auf Ihrem System aktivieren, um es mit dem Befehl yum zu installieren, wie gezeigt.

# yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

Unter Debian/Ubuntu und seinen Derivaten können Sie es mit dem Befehl apt-get installieren, wie gezeigt.

$ sudo apt-get install sshpass

Alternativ können Sie von der Quelle installieren, um die neueste Version von sshpass zu haben, zuerst den Quellcode herunterladen und dann den Inhalt der tar-Datei extrahieren und sie wie folgt installieren:

$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

So verwenden Sie sshpass unter Linux

sshpass zusammen mit ssh verwendet wird, können Sie alle sshpass-Nutzungsoptionen mit vollständigen Beschreibungen anzeigen, indem Sie den folgenden Befehl eingeben:

$ sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Wie ich bereits erwähnt habe, ist sshpass zuverlässiger und nützlicher für Skripting-Zwecke, betrachten Sie die Beispielbefehle unten.

Melden Sie sich mit dem Benutzernamen und dem Kennwort beim Linux-SSH-Remote-Server (10.42.0.1) an und überprüfen Sie die Festplattenauslastung des Remote-Systems, wie gezeigt.

$ sshpass -p 'my_pass_here' ssh [email  'df -h' 

Wichtig: Hier wird das Passwort auf der Befehlszeile angegeben, was praktisch unsicher ist und die Verwendung dieser Option wird nicht empfohlen.

Um jedoch zu verhindern, dass das Passwort auf dem Bildschirm angezeigt wird, können Sie das Flag -e verwenden und das Passwort als Wert der Umgebungsvariablen SSHPASS wie folgt eingeben:

$ export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

Hinweis: Im obigen Beispiel ist die Umgebungsvariable SSHPASS nur für vorübergehende Zwecke gedacht und wird während des Neustarts entfernt.

Um die Umgebungsvariable SSHPASS dauerhaft festzulegen, öffnen Sie die Datei /etc/profile und geben Sie die export-Anweisung am Anfang der Datei ein:

export SSHPASS='my_pass_here'

Speichern Sie die Datei, beenden Sie sie, und führen Sie dann den folgenden Befehl aus, um die Änderungen vorzunehmen:

$ source /etc/profile 

Auf der anderen Seite können Sie auch das Flag -f verwenden und das Passwort in eine Datei einfügen. Auf diese Weise können Sie das Passwort wie folgt aus der Datei auslesen:

$ sshpass -f password_filename ssh [email  'df -h'

Sie können auch sshpass verwenden, um Dateien mit scp zu übertragen oder Dateien über rsync mit SSH zu sichern/synchronisieren, wie gezeigt:

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Für eine weitere Verwendung empfehle ich Ihnen, die sshpass-Manpage durchzulesen, geben Sie Folgendes ein:

$ man sshpass

In diesem Artikel haben wir sshpass erklärt, ein einfaches Tool, das eine nicht-interaktive Passwortauthentifizierung ermöglicht. Obwohl dieses Tool hilfreich sein kann, wird dringend empfohlen, den sichereren Authentifizierungsmechanismus mit öffentlichen Schlüsseln von ssh zu verwenden.

Bitte hinterlassen Sie eine Frage oder einen Kommentar über den Feedback-Bereich unten für weitere Diskussionen.

Verwandte Artikel: