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.