Richten Sie mit SSH-Schlüsseln eine sichere, passwortlose Anmeldung bei Ihrem Remote-Ubuntu-Server ein
SSH ist ein sicheres Client-Server-Netzwerkprotokoll, das einem Client-Computer hilft, eine Verbindung zu einem Remote-Server herzustellen und mit ihm zu kommunizieren. Die SSH-Verbindung stellt sicher, dass die im Terminal eingegebenen Befehle über einen verschlüsselten Kanal an den Remote-Server gesendet werden.
Es gibt zwei Arten von Authentifizierungsmechanismen, die verwendet werden, um eine Verbindung zum Remote-Server herzustellen, die kennwortbasierte Authentifizierung (anfällig für Brute-Force-Angriffe) und die SSH-Schlüssel-basierte Authentifizierung (die sehr sicher ist).
Bei der SSH-Schlüssel-basierten Authentifizierung wird auf dem Client-Computer ein Schlüsselpaar generiert, das als öffentlicher Schlüssel und privater Schlüssel bezeichnet wird. Eine Kopie dieses öffentlichen Schlüssels wird auf dem entfernten Server bereitgestellt. Wenn ein Client eine Verbindungsanfrage an den Server sendet, generiert der Server eine zufällige Zeichenfolge und verschlüsselt sie mit dem öffentlichen Schlüssel. Diese Zeichenfolge kann nur mit dem privaten Schlüssel entschlüsselt werden, der auf dem Clientcomputer verfügbar ist. Diese Methode stellt sicher, dass nur Clients mit dem privaten Schlüssel auf den Server zugreifen können.
In diesem Handbuch erfahren Sie, wie Sie SSH-Schlüssel auf dem Ubuntu 20.04 LTS-Server einrichten.
Überprüfen Sie, ob auf Ihrem Computer ein SSH-Schlüssel vorhanden ist
Um zu überprüfen, ob bereits ein SSH-Schlüsselpaar auf Ihrem Computer vorhanden ist, geben Sie diesen Befehl in Ihr Terminal ein.
ls -l ~/.ssh/id_*.pub
Wenn der obige Befehl no such file or directory
oder zurückgibt no matches found
, bedeutet dies, dass kein SSH-Schlüsselpaar vorhanden ist.
Wenn Sie über ein vorhandenes SSH-Schlüsselpaar verfügen, können Sie entweder dasselbe Schlüsselpaar verwenden, um auf zwei Remote-Server zuzugreifen, oder Sie können auch ein anderes Schlüsselpaar mit einem anderen Namen erstellen. Lassen Sie uns zum nächsten Schritt übergehen und sehen, wie Sie SSH-Schlüssel für beide Fälle generieren.
Erstellen von SSH-Schlüsseln auf einem Client-Computer
Um ein neues SSH-Schlüsselpaar auf Ihrem Computer zu generieren, geben Sie den folgenden Befehl ein.
ssh-keygen
Standardmäßig haben die SSH-Schlüssel 2048 Bit. Wenn Sie SSH-Schlüssel mit höheren Bits generieren möchten, verwenden Sie zur besseren Sicherheit den folgenden Befehl.
ssh-keygen -b 4096
Wenn der Befehl erfolgreich ausgeführt wird, wird die folgende Meldung auf Ihrem Bildschirm angezeigt.
Generieren eines öffentlichen/privaten rsa-Schlüsselpaars.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/home/harshit/.ssh/id_rsa):
Wenn Sie jetzt kein vorhandenes SSH-Schlüsselpaar auf Ihrem Computer haben, drücken Enter
Sie einfach . Wenn Sie jedoch einen vorhandenen SSH-Schlüssel haben, speichern Sie den Schlüssel unter einem anderen Dateinamen, wie unten gezeigt.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/home/your_name/.ssh/id_rsa): /home/your_name/.ssh/id_rsa_xxx
Ersetzen Sie das xxx
am Ende des Dateinamens durch einen geeigneten Namen, wie unten gezeigt, und drücken Sie Enter
.
Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/home/your_name/.ssh/id_rsa): /home/your_name/.ssh/id_rsa_client_1
Die nächste Eingabeaufforderung fordert Sie auf, eine Passphrase beliebiger Länge einzugeben. Dies gewährleistet eine zweistufige Sicherheit auf Ihrem Gerät.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Durch die Eingabe dieser Passphrase wird sichergestellt, dass eine Person, selbst wenn sie Zugriff auf Ihren privaten Schlüssel erhält, ohne diese Passphrase nicht auf Ihren Remote-Server zugreifen kann.
Sobald der gesamte Vorgang abgeschlossen ist, erscheint die folgende Meldung auf Ihrem Bildschirm.
Die SSH-Schlüssel wurden auf Ihrem System generiert. Jetzt ist es an der Zeit, den öffentlichen Schlüssel auf den Remote-Server zu kopieren.
Kopieren des öffentlichen Schlüssels auf den Remote-Ubuntu-Server
Die einfachste und schnellste Methode zum Kopieren des öffentlichen Schlüssels auf den Remoteserver ist die Verwendung des ssh-copy-id
Dienstprogramms. Wenn dieses Dienstprogramm jedoch aus irgendeinem Grund auf Ihrem Computer nicht verfügbar ist, können Sie auch andere in diesem Abschnitt beschriebene Methoden verwenden.
Verwenden des Dienstprogramms ssh-copy-id
Das ssh-copy-id
Dienstprogramm ist standardmäßig auf Ihrem Ubuntu-Computer verfügbar, der den öffentlichen Schlüssel von Ihrem Gerät in das entsprechende Verzeichnis Ihres entfernten Ubuntu-Computers kopiert.
Um den öffentlichen ssh-Schlüssel zu kopieren, geben Sie einfach den Befehl in Ihr Terminal ein, wie unten gezeigt.
ssh-copy-id [email protected]
Ersetzen Sie das username
und hostname
im obigen Befehl durch den Benutzernamen und den Hostnamen Ihres Servers.
Wenn Sie zum ersten Mal eine Verbindung zu Ihrem Host herstellen, wird die folgende Meldung auf Ihrem Terminal angezeigt, geben Sie ein yes
und drücken Sie Enter
.
Die Authentizität des Hosts '172.105.XX.XX (172.105.XX.XX)' kann nicht festgestellt werden.
Der Fingerabdruck des ECDSA-Schlüssels ist xx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xx.
Möchten Sie die Verbindung wirklich fortsetzen (ja/nein)? Jawohl
Jetzt sucht das ssh-copy-id
Dienstprogramm nach der Datei mit dem Namen, id_rsa.pub
die den öffentlichen SSH-Schlüssel enthält. Sobald der Scanvorgang abgeschlossen ist, werden Sie aufgefordert, das Passwort Ihres Remote-Servers einzugeben, wie unten gezeigt. Geben Sie das Passwort ein und drücken Sie Enter
.
/usr/bin/ssh-copy-id: INFO: Versuch, sich mit den neuen Schlüsseln anzumelden, um alle bereits installierten herauszufiltern
/usr/bin/ssh-copy-id: INFO: Es müssen noch 1 Schlüssel installiert werden -- wenn Sie jetzt dazu aufgefordert werden, müssen die neuen Schlüssel installiert werden
Passwort von [email protected] :
Sobald der Schlüssel hinzugefügt wurde, wird die folgende Meldung auf Ihrem Terminal als Ausgabe angezeigt.
Anzahl der hinzugefügten Schlüssel: 1
Versuchen Sie nun, sich mit: "ssh ' [email protected] '" am Computer anzumelden und überprüfen Sie, ob nur die gewünschten Schlüssel hinzugefügt wurden.
Falls Sie mehrere SSH-Schlüssel auf Ihrem Client-Computer haben, geben Sie den Befehl in dem unten gezeigten Muster ein, um den entsprechenden öffentlichen Schlüssel auf Ihren Remote-Computer zu kopieren.
ssh-copy-id -i id_rsa_xxx.pub [email protected]
💡 Tipp
Vergessen Sie nicht, .pub an das Ende des Dateinamens zu setzen, während Sie das Terminal eingeben.
Kopieren des öffentlichen Schlüssels nach der Piping-Methode
Geben Sie den folgenden Befehl in das Terminal ein, wenn das ssh-copy-id
Dienstprogramm nicht verfügbar ist. Dieser Befehl mag etwas länger erscheinen, funktioniert aber entsprechend.
cat ~/.ssh/id_rsa.pub | ssh [email protected]_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Ersetzen Sie remote_username
und server_ip_address
durch Ihren Benutzernamen und Ihre IP-Adresse.
Wenn auf Ihrem Computer mehrere SSH-Schlüssel verfügbar sind, ersetzen Sie diese id_rsa.pub
durch die öffentliche SSH-Schlüsseldatei Ihrer Wahl. Zum Beispiel id_rsa_client_1.pub
.
Geben Sie das Remote-Benutzerkennwort ein, wenn Sie dazu aufgefordert werden, und drücken Sie Enter
.
[email protected]'s password:
Sobald Sie das Kennwort eingeben, wird die id_rsa.pub
Datei in die authorized_keys
Datei des Remote-Servers kopiert .
Manuelles Kopieren des öffentlichen Schlüssels
Verwenden Sie diese Methode, wenn Sie über die Kennwortauthentifizierung keinen Zugriff auf Ihr Remote-System haben.
Öffnen Sie die id_rsa.pub
Datei mit dem cat
Befehl im Terminal. Sie können es auch von einem Texteditor aus öffnen, der Zweck besteht nur darin, den Inhalt der Datei zu kopieren.
cat ~/.ssh/id_rsa.pub
Der Inhalt der Datei sieht wie unten gezeigt aus.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH [email protected] _PC
Melden Sie sich nun bei Ihrem Remote-Server an und fügen Sie den kopierten Inhalt mit dem unten gezeigten Befehl ein. Ersetzen Sie das above_string
durch den kopierten Inhalt.
echo above_string >> ~/.ssh/authorized_keys
Mehrere SSH-Schlüssel konfigurieren (optional)
Dieser Schritt ist für Personen gedacht, die auf ihrem Clientcomputer mehrere SSH-Schlüssel eingerichtet haben. Überspringen Sie diesen Abschnitt, wenn Sie nur ein SSH-Schlüssel-Setup haben.
Um mehrere SSH-Schlüssel zu verwalten, erstellen wir nun mit dem unten gezeigten Befehl eine config
Datei im .ssh
Verzeichnis.
cd ~/.ssh
vim config
Geben Sie ein i
, um in den Befehlsmodus zu gelangen, und geben Sie die Details mehrerer Hosts ein, wie im folgenden Beispiel gezeigt:
Host remote-ubuntu-server
HostName 172.105.XX.XX
User root
IdentityFile ~/.ssh/id_rsa_client_1
Host remote-ubuntu-server
HostName 172.106.XX.XX
User root
IdentityFile ~/.ssh/id_rsa_client_2
Geben Sie auf ähnliche Weise die Details anderer Remoteserver und deren Schlüssel ein. Sobald der Vorgang abgeschlossen ist, drücken Sie Esc
und :wq
zum Speichern und Beenden.
Jetzt sind die nachfolgenden Prozesse für beide mit einem oder mehreren SSH-Schlüsseln auf dem Client-Computer gleich.
Melden Sie sich mit SSH-Schlüsseln bei Ihrem Remote-Server an
Sobald das Kopieren Ihres öffentlichen Schlüssels abgeschlossen ist, melden Sie sich bei Ihrem Remote-Server an, indem Sie den unten gezeigten Befehl eingeben.
ssh [email protected]_ip_address
Wenn Sie die Passphrase beim Generieren des Schlüsselpaars angegeben haben, werden Sie aufgefordert, sie einzugeben. Nach Abschluss des Authentifizierungsprozesses wird eine neue Sitzung geöffnet.
Sie haben nun erfolgreich die SSH-Schlüssel-basierte Authentifizierung auf Ihrem Remote-Server konfiguriert. Aber die passwortbasierte Authentifizierung ist auf Ihrem Server immer noch aktiv, das bedeutet, dass Ihr entfernter Server immer noch anfällig für Brute-Force-Angriffe ist.
Also werden wir jetzt den passwortbasierten Anmeldemechanismus von unserem Remote-Server vollständig deaktivieren.
Deaktivieren Sie den passwortbasierten Anmeldemechanismus
Bevor Sie Änderungen vornehmen, stellen Sie sicher, dass der Root-Benutzer oder jeder sudo-aktivierte Benutzer für Ihr Remote-Konto über das SSH-Schlüsselbasierte Authentifizierungssystem Zugriff auf Ihren Server hat. Dieser Schritt sperrt oder deaktiviert die passwortbasierte Anmeldung vollständig, daher ist es wichtig, dass mindestens ein Benutzer mit Root-Rechten über einen SSH-Schlüssel Zugriff auf den Server hat.
Melden Sie sich bei Ihrem Remote-Ubuntu-Server an und geben Sie den unten gezeigten Befehl ein.
sudo vim /etc/ssh/sshd_config
- Drücken Sie
Esc
, geben Sie /
'PasswordAuthentication' ein und drücken Sie enter
.
- Drücken Sie nun
i
und ändern Sie den Wert von 'PasswordAuthentication yes' in 'PasswordAuthentication no'.
- Drücken Sie
Esc
und wiederholen Sie den Vorgang ‚ChallengeResponseAuthentication‘ zu finden, ‚UsePAM‘, und ihre Werte ändern no
als auch.
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Sobald alle Werte auf eingestellt sind no
, drücken Sie Esc
, geben Sie ein :wq
und drücken Sie enter
.
Um alle Änderungen zu aktivieren, starten Sie den ssh
Dienst mit dem folgenden Befehl neu.
sudo systemctl restart ssh
Öffnen Sie nun ein neues Terminalfenster auf Ihrem Computer und überprüfen Sie, ob Ihre SSH-Schlüssel-Authentifizierung ordnungsgemäß funktioniert, bevor Sie die aktuelle Sitzung schließen.
Schließen Sie nach Abschluss des Überprüfungsprozesses alle laufenden Sitzungen.
Wir haben nun erfolgreich die SSH-Schlüssel-basierte Authentifizierung auf unserem Ubuntu 20.04-Server konfiguriert. Jetzt kann sich niemand mehr über einen passwortbasierten Anmeldemechanismus an Ihrem Server anmelden.