Richten Sie die passwortlose SSH-Anmeldung für mehrere Remote-Server mithilfe eines Skripts ein
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 Passwortauthentifizierung. 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.
In diesem Artikel zeigen wir, wie Sie mit einem Shell-Skript ein SSH-Schlüsselpaar erstellen und den öffentlichen Schlüssel gleichzeitig auf mehrere Remote-Linux-Hosts kopieren.
Erstellen Sie einen neuen SSH-Schlüssel unter 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 Remote-SSH-Server anmeldet, und den öffentlichen Schlüssel, der als autorisierter Schlüssel auf einem Remote-System gespeichert ist, auf dem ein SSH-Server ausgeführt wird) mithilfe von 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, mit dem eine Verbindung hergestellt werden soll, HOST_FILE
– eine Datei, die die Liste der Hostnamen oder IP-Adressen enthält und ERROR_FILE
– eine Datei zum Speichern aller SSH-Befehlsfehler).
#!/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 $USER_NAME@$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 das Skript dann wie gezeigt mit dem Befehl chmod ausführbar.
chmod +x ssh-copy.sh
Führen Sie nun das Skript ssh-copy.sh
aus und geben Sie Ihre öffentliche Schlüsseldatei als erstes Argument an, wie im Screenshot gezeigt:
./ssh-copy.sh /root/.ssh/prod-rsa.pub
Als nächstes verwenden Sie ssh-agent
zum Verwalten Ihrer Schlüssel, der Ihren entschlüsselten privaten Schlüssel im Speicher speichert und ihn zur Authentifizierung von Anmeldungen verwendet. Fügen Sie nach dem Starten des ssh-agent
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
Das ist alles, was wir für Sie hatten! Wenn Sie einen Beitrag insbesondere zur Verbesserung des Shell-Skripts leisten möchten, teilen Sie uns dies über das unten stehende Feedback-Formular mit.