Der Befehl ssh-copy-id ist ein nützliches Werkzeug, um die SSH-Schlüsselbasierte Authentifizierung zwischen Servern einfach einzurichten. Es kann jedoch vorkommen, dass beim Versuch, diesen Befehl zu verwenden, der Fehler "/usr/bin/ssh-copy-id: error: no identities found" auftritt. Dieses Tutorial führt Sie durch die Schritte zur Fehlerbehebung und Behebung dieses Problems, um einen reibungslosen SSH-Schlüsselbasierten Authentifizierungsprozess zu gewährleisten. Am Ende dieses Labs werden Sie verstehen, wie die SSH-Schlüsselauthentifizierung funktioniert und in der Lage sein, sie auf Ihren Systemen ordnungsgemäß zu konfigurieren.
SSH-Schlüsselauthentifizierung verstehen
Bevor wir uns mit der Fehlerbehebung des Fehlers "no identities found" befassen, ist es wichtig zu verstehen, was SSH-Schlüsselauthentifizierung ist und wie sie funktioniert.
Was ist SSH-Schlüsselauthentifizierung?
Die SSH-Schlüsselauthentifizierung (Secure Shell) ist eine Methode, um sich sicher bei Remote-Systemen anzumelden, ohne jedes Mal ein Passwort eingeben zu müssen. Sie verwendet ein Paar kryptografischer Schlüssel:
Ein privater Schlüssel (private key), der auf Ihrem lokalen Rechner verbleibt
Ein öffentlicher Schlüssel (public key), der auf den Remote-Server kopiert wird
Wenn Sie versuchen, sich mit einem Remote-Server zu verbinden, verwendet Ihr SSH-Client Ihren privaten Schlüssel, um eine Signatur zu erstellen. Der Server überprüft diese Signatur anhand Ihres öffentlichen Schlüssels, der in seiner Datei authorized_keys gespeichert ist. Wenn die Signatur gültig ist, erhalten Sie Zugriff, ohne ein Passwort eingeben zu müssen.
Was ist ssh-copy-id?
Der Befehl ssh-copy-id ist ein Hilfsprogramm, das den Prozess des Kopierens Ihres öffentlichen Schlüssels auf einen Remote-Server vereinfacht. Er fügt Ihren öffentlichen Schlüssel der Datei ~/.ssh/authorized_keys des Remote-Servers hinzu, was eine passwortlose Authentifizierung bei zukünftigen Verbindungen ermöglicht.
Lassen Sie uns überprüfen, ob Sie bereits SSH-Schlüssel auf Ihrem System haben. Führen Sie den folgenden Befehl in Ihrem Terminal aus:
ls -la ~/.ssh
Wenn Sie keine Dateien sehen oder das Verzeichnis .ssh nicht existiert, machen Sie sich keine Sorgen - wir werden im nächsten Schritt alles erstellen.
SSH-Schlüssel generieren
Wenn Sie keine SSH-Schlüssel haben oder neue erstellen möchten, können Sie diese mit dem Befehl ssh-keygen generieren. Dies ist oft der erste Schritt zur Behebung des Fehlers "no identities found".
Ein neues SSH-Schlüsselpaar erstellen
Lassen Sie uns ein neues SSH-Schlüsselpaar generieren, indem wir den folgenden Befehl ausführen:
-t rsa gibt den Typ des zu erstellenden Schlüssels an (RSA)
-b 4096 gibt die Bitlänge an (stärkere Verschlüsselung)
-C fügt einen Kommentar (normalerweise eine E-Mail) hinzu, um den Schlüssel zu identifizieren
Wenn Sie diesen Befehl ausführen, werden Sie aufgefordert:
Geben Sie einen Dateispeicherort ein, um den Schlüssel zu speichern (drücken Sie die Eingabetaste, um den Standardspeicherort ~/.ssh/id_rsa zu verwenden).
Geben Sie eine Passphrase ein (Sie können zweimal die Eingabetaste drücken, um keine Passphrase zu verwenden, aber die Verwendung einer Passphrase fügt eine zusätzliche Sicherheitsebene hinzu).
Die Ausgabe sollte ähnlich aussehen wie:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----[SHA256]-----+
Überprüfen der SSH-Schlüsselerstellung
Lassen Sie uns nun überprüfen, ob die Schlüssel ordnungsgemäß erstellt wurden:
ls -la ~/.ssh
Sie sollten nun sowohl den privaten Schlüssel (id_rsa) als auch den öffentlichen Schlüssel (id_rsa.pub) in der Ausgabe sehen:
Lassen Sie uns auch den Inhalt Ihrer öffentlichen Schlüsseldatei anzeigen:
cat ~/.ssh/id_rsa.pub
Die Ausgabe sollte eine einzelne Zeile sein, die mit ssh-rsa beginnt, gefolgt von einer langen Zeichenkette und mit Ihrer E-Mail-Adresse oder Ihrem Kommentar endet.
Nachdem wir nun bestätigt haben, dass unsere SSH-Schlüssel existieren, können wir mit dem nächsten Schritt fortfahren: Fehlerbehebung und Behebung des Fehlers "no identities found".
Die Fehlermeldung "No Identities Found" verstehen und beheben
Nachdem wir nun unsere SSH-Schlüssel eingerichtet haben, wollen wir verstehen, warum die Fehlermeldung "no identities found" auftritt und wie man sie behebt.
Häufige Ursachen des Fehlers
Der Fehler "no identities found" tritt typischerweise aus einem der folgenden Gründe auf:
SSH-Schlüssel existieren nicht
SSH-Schlüssel befinden sich nicht am Standardspeicherort
SSH-Schlüssel haben falsche Berechtigungen
Der Befehl ssh-copy-id kann keine öffentlichen Schlüssel zur Verwendung finden
Da wir bereits bestätigt haben, dass unsere SSH-Schlüssel am Standardspeicherort existieren, überprüfen wir die Berechtigungen.
SSH-Schlüsselberechtigungen überprüfen und korrigieren
SSH ist aus Sicherheitsgründen sehr wählerisch in Bezug auf Dateiberechtigungen. Führen Sie den folgenden Befehl aus, um die Berechtigungen Ihres Verzeichnisses .ssh und dessen Inhalt zu überprüfen:
ls -la ~/.ssh
Für eine ordnungsgemäße Sicherheit:
Das Verzeichnis .ssh sollte die Berechtigungen 700 (rwx------) haben
Der private Schlüssel (id_rsa) sollte die Berechtigungen 600 (rw-------) haben
Der öffentliche Schlüssel (id_rsa.pub) sollte die Berechtigungen 644 (rw-r--r--) haben
Wenn Ihre Berechtigungen falsch sind, können Sie sie mit den folgenden Befehlen korrigieren:
-i die zu verwendende Identitätsdatei (öffentlicher Schlüssel) angibt
username Ihr Benutzername auf dem Remote-Server ist
remote_host der Hostname oder die IP-Adresse des Remote-Servers ist
Für unsere Laborumgebung simulieren wir dies, indem wir den lokalen Rechner verwenden. Führen Sie Folgendes aus:
ssh-copy-id -i ~/.ssh/id_rsa.pub labex@localhost
Sie werden nach dem Passwort des Remote-Benutzers gefragt.
Öffnen Sie ein Terminalfenster in der Desktop-Umgebung, nur das Terminal der Desktop-Umgebung hat die Umgebungsvariablen gesetzt.
Um das Passwort abzurufen, führen Sie den folgenden Befehl aus.
printenv | grep PASSWORD
Hinweis: Sie müssen diesen Befehl im Terminal der Desktop-Umgebung ausführen, nicht in dem Terminal, das Sie über die obere Menüleiste geöffnet haben.
Dieser Befehl zeigt alle Umgebungsvariablen an, die "PASSWORD" enthalten. Suchen Sie nach einer Zeile, die LABEX_PASSWORD=... enthält. Die Zeichen nach dem Gleichheitszeichen sind Ihr Passwort.
Sie würden dieses Passwort eingeben, und der öffentliche Schlüssel würde auf den Remote-Server kopiert.
Wenn Sie eine Meldung wie "Number of key(s) added: 1" sehen, wurde Ihr Schlüssel erfolgreich kopiert.
SSH-Schlüsselauthentifizierung überprüfen
Nachdem wir den Fehler "no identities found" behoben und unseren SSH-Schlüssel erfolgreich auf den Remote-Server kopiert haben, wollen wir überprüfen, ob die SSH-Schlüsselauthentifizierung ordnungsgemäß funktioniert.
SSH-Schlüsselauthentifizierung testen
In einer realen Umgebung würden Sie die SSH-Schlüsselauthentifizierung testen, indem Sie sich mit dem Remote-Server verbinden:
ssh username@remote_host
Wenn Ihr SSH-Schlüssel korrekt eingerichtet ist, sollten Sie sich ohne Eingabe eines Passworts anmelden können (es sei denn, Sie haben eine Passphrase für Ihren Schlüssel festgelegt, in diesem Fall müssten Sie diese eingeben).
Für unsere Laborumgebung können wir dies testen, indem wir versuchen, uns per SSH mit localhost zu verbinden:
ssh labex@localhost
Wenn Sie eine Aufforderung erhalten, die Verbindung zu bestätigen (weil localhost nicht in Ihrer Datei mit bekannten Hosts enthalten ist), geben Sie yes ein.
Möglicherweise sehen Sie eine Meldung wie:
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Wenn Sie nach einem Passwort gefragt werden, bedeutet dies, dass die SSH-Schlüsselauthentifizierung noch nicht funktioniert. Wenn Sie sich jedoch erfolgreich ohne Eingabe eines Passworts anmelden, funktioniert Ihre SSH-Schlüsselauthentifizierung korrekt.
Häufige Probleme und Lösungen bei der SSH-Schlüsselauthentifizierung
Wenn Sie weiterhin Probleme mit der SSH-Schlüsselauthentifizierung haben, finden Sie hier einige häufige Probleme und Lösungen:
SSH-Serverkonfiguration: Der SSH-Server muss so konfiguriert sein, dass er die Authentifizierung mit öffentlichen Schlüsseln zulässt. Dies ist normalerweise standardmäßig aktiviert, aber Sie können dies überprüfen, indem Sie die Datei /etc/ssh/sshd_config auf dem Remote-Server untersuchen:
grep PubkeyAuthentication /etc/ssh/sshd_config
Es sollte PubkeyAuthentication yes angezeigt werden.
Dateibesitz (File Ownership): Ihr Home-Verzeichnis und das Verzeichnis .ssh müssen Ihnen gehören:
ls -ld ~ ~/.ssh
Beide sollten Ihren Benutzernamen als Eigentümer anzeigen.
SSH-Verbindung debuggen: Sie können das Verbose-Flag verwenden, um SSH-Verbindungen zu debuggen:
ssh -v labex@localhost
Dies zeigt detaillierte Informationen über den Authentifizierungsprozess an, die helfen können, das Problem zu identifizieren.
Best Practices für die SSH-Schlüsselverwaltung
Hier sind einige Best Practices für die Verwaltung von SSH-Schlüsseln:
Verwenden Sie eine Passphrase: Erwägen Sie bei der Generierung Ihres SSH-Schlüssels die Verwendung einer Passphrase für zusätzliche Sicherheit.
Verschiedene Schlüssel für verschiedene Server: Für erhöhte Sicherheit sollten Sie verschiedene Schlüssel für verschiedene Server oder Zwecke verwenden.
Sichern Sie Ihre Schlüssel: Bewahren Sie Sicherungskopien Ihrer SSH-Schlüssel an einem sicheren Ort auf.
Regelmäßiges Rotieren von Schlüsseln: Für sensible Umgebungen sollten Sie Ihre SSH-Schlüssel regelmäßig rotieren.
Indem Sie diese Schritte und Best Practices befolgen, können Sie sicherstellen, dass die SSH-Schlüsselauthentifizierung zuverlässig und sicher funktioniert.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie den Fehler "no identities found" bei der Verwendung des Befehls ssh-copy-id beheben und lösen können. Wir haben Folgendes behandelt:
Verstehen der SSH-Schlüsselauthentifizierung und der Funktionsweise des Befehls ssh-copy-id
Generieren von SSH-Schlüsselpaaren mit dem Befehl ssh-keygen
Überprüfen und Korrigieren von SSH-Schlüsselberechtigungen
Korrekte Verwendung von ssh-copy-id, um Ihren öffentlichen Schlüssel auf einen Remote-Server zu kopieren
Testen und Verifizieren der SSH-Schlüsselauthentifizierung
Häufige Probleme und Best Practices für die SSH-Schlüsselverwaltung
Mit diesen Fähigkeiten können Sie nun sichere, passwortlose SSH-Verbindungen zwischen Systemen einrichten, was für eine effiziente Systemadministration und Automatisierung unerlässlich ist. Die SSH-Schlüsselauthentifizierung bietet nicht nur eine bessere Sicherheit als die Passwortauthentifizierung, sondern vereinfacht auch den Anmeldevorgang für legitime Benutzer.
Denken Sie daran, dass die ordnungsgemäße Sicherung Ihrer SSH-Schlüssel von entscheidender Bedeutung ist, da diese direkten Zugriff auf Ihre Systeme ermöglichen. Bewahren Sie Ihre privaten Schlüssel stets sicher auf und erwägen Sie die Verwendung von Passphrasen für zusätzlichen Schutz.