Website-Suche

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.