Die SSH-Schlüssel-basierte Authentifizierung (auch bekannt als Public-Key-Authentifizierung) ermöglicht eine passwortlose Authentifizierung und ist eine sicherere und viel bessere Lösung als die Passwort-Authentifizierung. Ein großer Vorteil der passwortlosen SSH-Anmeldung, ganz zu schweigen von der Sicherheit, besteht darin, dass sie die Automatisierung verschiedener Arten von serverübergreifenden Prozessen ermöglicht.
Verwandte Lektüre :So sichern und härten Sie den OpenSSH-ServerIn diesem Artikel demonstrieren wir, wie Sie ein SSH-Schlüsselpaar erstellen und den öffentlichen Schlüssel mit einem Shell-Skript gleichzeitig auf mehrere entfernte Linux-Hosts kopieren.
Erstellen Sie einen neuen SSH-Schlüssel in Linux
Generieren Sie zunächst das SSH-Schlüsselpaar (den privaten Schlüssel/Identitätsschlüssel, den ein SSH-Client verwendet, um sich selbst zu authentifizieren, wenn er sich bei einem entfernten SSH-Server anmeldet, und den öffentlichen Schlüssel, der als autorisierter Schlüssel auf einem entfernten System gespeichert ist, auf dem ein SSH-Server ausgeführt wird), indem Sie die ssh-keygen Befehl wie folgt:
# ssh-keygen
Erstellen Sie ein Shell-Skript für mehrere Remote-Anmeldungen
Erstellen Sie als Nächstes ein Shell-Skript, das beim Kopieren eines öffentlichen Schlüssels auf mehrere Remote-Linux-Hosts hilft.
# vim ~/.bin/ssh-copy.sh
Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein (ersetzen Sie die folgenden Variablen entsprechend USER_NAME
– der Benutzername für die Verbindung, HOST_FILE
– eine Datei, die die Liste der Hostnamen oder IP-Adressen enthält, und ERROR_FILE
– eine Datei zum Speichern von SSH-Befehlsfehlern).
#!/bin/bash USER_NAME="root" HOST_FILE="/root/hosts" ERROR_FILE="/tmp/ssh-copy_error.txt" PUBLIC_KEY_FILE="$1" if [ ! -f $PUBLIC_KEY_FILE ]; then echo "File '$PUBLIC_KEY_FILE' not found!" exit 1 fi if [ ! -f $HOST_FILE ]; then echo "File '$HOST_FILE' not found!" exit 2 fi for IP in `cat $HOST_FILE`; do ssh-copy-id -i $PUBLIC_KEY_FILE [email protected]$IP 2>$ERROR_FILE RESULT=$? if [ $RESULT -eq 0 ]; then echo "" echo "Public key successfully copied to $IP" echo "" else echo "$(cat $ERROR_FILE)" echo exit 3 fi echo "" done
Speichern Sie die Datei und schließen Sie sie.
Machen Sie dann das Skript mit dem chmod ausführbar Befehl wie gezeigt.
# chmod +x ssh-copy.sh
Führen Sie nun ssh-copy.sh
aus script und geben Sie Ihre öffentliche Schlüsseldatei als erstes Argument an, wie im Screenshot gezeigt:
# ./ssh-copy.sh /root/.ssh/prod-rsa.pub
Verwenden Sie als Nächstes ssh-agent
um Ihre Schlüssel zu verwalten, die Ihren entschlüsselten privaten Schlüssel im Speicher halten und ihn zur Authentifizierung von Anmeldungen verwenden. Nach dem Start des ssh-agent
, fügen Sie Ihren privaten Schlüssel wie folgt hinzu:
# eval "$(ssh-agent -s)" # ssh-add ~/.ssh/prod_rsa
Melden Sie sich ohne Passwort beim Remote-Linux-Server an
Jetzt können Sie sich bei jedem Ihrer Remote-Hosts anmelden, ohne ein Passwort für die SSH-Benutzerauthentifizierung anzugeben. Auf diese Weise können Sie serverübergreifende Prozesse automatisieren.
# ssh [email protected]
Das ist alles, was wir für Sie hatten! Wenn Sie insbesondere zur Verbesserung des Shell-Skripts beitragen möchten, lassen Sie es uns über das Feedback-Formular unten wissen.