Verwendete Befehle
-
ASCII-Art des öffentlichen Hostschlüssels anzeigen, der auf dem Server gespeichert ist (muss auf der Serverseite erfolgen, derjenigen, mit der Sie sich über ssh verbinden):
ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
-l :Fingerabdruck der angegebenen öffentlichen Schlüsseldatei anzeigen.
-v :visuell (ASCII-Art)
-f :Datei
-
ASCII-Art des öffentlichen Hostschlüssels des Remote-Servers anzeigen (muss auf der Client-Seite erfolgen, von der Sie sich über ssh verbinden):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o :Option
visueller Hostschlüssel :visuell (ASCII-Art)
FingerprintHash :zu verwendender Hash-Algorithmus
Was tun, um die Authentizität eines Hosts/Servers zu überprüfen
Zuerst muss 1. lokal auf dem Server (dem, mit dem Sie sich über ssh verbinden möchten) durchgeführt werden:Es wird Ihnen eine erste ASCII-Grafik geben. Drucken Sie es aus oder machen Sie ein Foto.
Zweitens, 2. muss bei der ersten SSH-Verbindung erfolgen; Es wird eine zweite ASCII-Grafik angezeigt. Wenn die ASCII-Art dieselbe ist, können Sie mit Ja antworten zum "vertraue ich?" Frage (z.B. Are you sure you want to continue connecting (yes/no)
).
Beispiel
- Serverseite
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
- Clientseite
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
Eine weitere Erklärung
Der erste Befehl zeigt die ASCII-Art an, die dem Fingerabdruck der Datei entspricht, die Sie als Eingabe angeben. Die Datei, die Sie als Eingabe angeben, ist der öffentliche Host Schlüssel des Servers. Wenn sich ein Client verbindet (nicht nur zum ersten Mal), sendet der Server seinen öffentlichen Hostschlüssel. Dieser öffentliche Hostschlüssel wird in ~/.ssh/known_hosts
gesucht . Wenn der öffentliche Schlüssel in der Datei ist, dann ist es in Ordnung:Der Host (Server) ist bekannt, also gehen wir zum nächsten Schritt über, um den Benutzer zu authentifizieren (die Benutzerauthentifizierung wird in diesem Beitrag nicht beschrieben). Wenn der öffentliche Schlüssel nicht in der Datei enthalten ist, berechnet der Client den Fingerabdruck dieses öffentlichen Hostschlüssels mit einem Hash-Algorithmus (ein anderer Hash-Algorithmus ergibt einen anderen Fingerabdruck). Dieser zuvor berechnete Fingerabdruck wird angezeigt (zusammen mit der ASCII-Art, falls die entsprechende Option bereitgestellt wird) und Sie müssen mit Ja oder Nein antworten, je nachdem, ob Sie diesen Fingerabdruck erkennen oder nein (dieser Fingerabdruck ist das Bild/Hash des öffentlichen Hostschlüssels der Server). Wenn Sie ja sagen, wird der öffentliche Schlüssel des Servers (nicht sein Fingerabdruck) zur Datei ~/.ssh/known_hosts
hinzugefügt .
Wir können diesen ~/.ssh/known_hosts
bemerken befindet sich unter Ihrem Home-Verzeichnis (~), weil Sie Vertrauen Sie diesem Host (Server), aber ein anderer Benutzer vertraut möglicherweise nicht dem gleichen wie Ihnen. Außerdem ist der öffentliche Hostschlüssel des Servers nicht benutzerabhängig, daher wird er in /etc/ssh/
gespeichert .
Der zweite Befehl zeigt den Fingerabdruck und die ASCII-Art des öffentlichen Schlüssels an, der von host_server_to_connect empfangen wurde (entsprechend dem in den Optionen angegebenen Hash-Algo). Es ist dasselbe, als würde man nur ssh verwenden, aber mit mehr visuellen Optionen, sodass die Verbindung genauso fortgesetzt wird wie eine normale ssh-Verbindung.
Auf meinem System muss ich anstelle des Standardschlüssels SHA256 einen MD5-Schlüssel angeben:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Dies gibt eine Zeichenfolge in einem Format aus, das dem Fehler entspricht, den ich auf dem Client gesehen habe.
Moment, ich habe es gefunden. Führen Sie den Befehl aus:
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
Mit einem aktuellen ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j 10. Mai 2012) habe ich es folgendermaßen geschrieben:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
Hinweise:
- Wenn Ihr sshd auf einem benutzerdefinierten Port läuft, fügen Sie '
-p portNumber
hinzu ' an diessh-keyscan
Befehl) ssh-keyscan
schreibt aufstderr
, nichtstdout
(!), daher derbash
Weiterleitung '2>&1
' (das kann je nach Shell variieren)
Das ist die Zeile, die ich zu meinem ~/.ssh/known_hosts
hinzugefügt habe Datei, um ssh-Anfragen von localhost für meine Tests zu autorisieren (hauptsächlich für gitolite, das ssh verwendet).
Daniel Böhmer bestätigt in den Kommentaren:
ssh-keyscan
stellt den/die vollständigen öffentlichen Schlüssel des SSH-Servers bereit- die Ausgabe von
ssh-keygen
ist nahezu identisch mit dem Format der öffentlichen Schlüsseldateien.
Entfernen Sie einfach die erste Spalte (IP-Adresse oder Hostname) und speichern Sie diese oder leiten Sie sie anssh-keygen -l
weiter der den Fingerabdruck darstellt.
Daniel fügt hinzu:
Fingerabdrücke aller öffentlichen Schlüssel des Servers anzeigen, die in ~/.ssh/know_hosts
gespeichert sind :
cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done