Ich sehe überall in Google Informationen darüber, wie der Fingerabdruck des RSA-Schlüssels angezeigt wird, nicht jedoch der ECDSA-Fingerabdruck.
Antworten:
Warten Sie, ich habe es gefunden. Führen Sie den folgenden 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 wie folgt geschrieben:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
Anmerkungen:
-p portNumber
dem ssh-keyscan
Befehl ' ' hinzu. )ssh-keyscan
schreibt weiter stderr
, nicht stdout
(!), daher die bash
Umleitung ' 2>&1
' (die je nach Shell variieren kann)Dies ist die Zeile, die ich meiner ~/.ssh/known_hosts
Datei hinzugefügt habe, 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 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
den Fingerabdruck weiter.
Daniel fügt hinzu:
Fingerabdrücke aller öffentlichen Serverschlüssel anzeigen in
~/.ssh/know_hosts
:
cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
ssh-keyscan
der Tat die vollständigen öffentlichen Schlüssel des SSH-Servers bereit. Ich habe einen Speicherauszug der Ausgabe und möchte diesen nun mit dem Fingerabdruck vergleichen, der ssh
während der ersten Verbindung angezeigt wird . Wie geht das?
ssh-keygen
ist fast 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 an ssh-keygen -l
den Fingerabdruck weiter. Ich möchte immer noch wissen, wie ssh
der vollständige öffentliche Schlüssel des Servers angezeigt wird, wenn ich um Bestätigung gebeten werde.
~/.ssh/know_hosts
:cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
Auf meinem System muss ich anstelle des Standard-SHA256 einen MD5-Schlüssel angeben:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Dies gab eine Zeichenfolge in einem Format aus, das dem Fehler entsprach, den ich auf dem Client sah.
-E
Flag wurde in OpenSSH> 6.6 eingeführt, ungefähr zu der Zeit, als standardmäßig auf SHA256-Fingerabdruck umgeschaltet wurde. In den Fällen, in denen der Client SHA256-Fingerabdrücke anzeigt, kann dieses Format nicht auf dem Server ausgegeben werden. Ein Weg , um diese: superuser.com/a/1030779
Verwendete Befehle
Zeigen Sie ASCII-Art des auf dem Server gespeicherten öffentlichen Hostschlüssels an (auf der Serverseite, die Sie ü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-Kunst)
-f : Datei
Anzeige der ASCII-Art des öffentlichen Hostschlüssels des Remoteservers (auf der Clientseite, die Sie über ssh verbinden):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-Ö : Option
VisualHostkey : Visual (ASCII-Kunst)
FingerprintHash : Hash Algo zu verwenden
Was tun, um die Authentizität eines Hosts / Servers zu überprüfen?
Erstens muss 1. lokal auf dem Server ausgeführt werden (derjenige, mit dem Sie über ssh eine Verbindung herstellen möchten): Sie erhalten eine erste ASCII-Grafik. Drucken Sie es aus oder machen Sie ein Foto.
Zweitens ist 2. bei der ersten SSH-Verbindung durchzuführen; es wird eine zweite ASCII-Kunst angezeigt. Wenn die ASCII-Kunst dieselbe ist, können Sie das "Vertraue ich?" Mit Ja beantworten. Frage (dhAre you sure you want to continue connecting (yes/no)
).
Beispiel
$ 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.. |
+-----------------+
$ 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)?
Noch eine Erklärung
Der erste Befehl zeigt die ASCII-Grafik an, die dem Fingerabdruck der Datei entspricht, die Sie als Eingabe angeben. Die Datei, die Sie als Eingabe angeben, ist öffentlich Hostschlüssel des Servers. Wenn ein Client eine Verbindung herstellt (nicht nur zum ersten Mal), sendet der Server seinen öffentlichen Hostschlüssel. Dieser öffentliche Hostschlüssel wird in gesucht~/.ssh/known_hosts
. Wenn sich der öffentliche Schlüssel in der Datei befindet, ist dies in Ordnung: Der Host (Server) ist bekannt, und wir fahren mit dem nächsten Schritt fort, 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 gibt einen anderen Fingerabdruck). Dieser zuvor berechnete Fingerabdruck wird angezeigt (zusammen mit der ASCII-Grafik, falls die entsprechende Option angegeben ist) und Sie müssen mit Ja oder Nein antworten, je nachdem, ob Sie diesen Fingerabdruck oder Nein erkennen (dieser Fingerabdruck ist das Bild / der Hash des öffentlichen Host-Schlüssels des Server). Wenn Sie "Ja" sagen, wird der öffentliche Schlüssel des Servers (nicht sein Fingerabdruck) zur Datei hinzugefügt ~/.ssh/known_hosts
.
Wir können feststellen, dass ~/.ssh/known_hosts
sich das unter Ihrem Home-Verzeichnis (~) befindet, da Sie diesem Host (Server) vertrauen, ein anderer Benutzer jedoch möglicherweise nicht dem gleichen wie Ihnen vertraut. Außerdem ist der öffentliche Hostschlüssel des Servers nicht benutzerabhängig, sodass er in gespeichert wird /etc/ssh/
.
Der zweite Befehl zeigt den Fingerabdruck und die ASCII- Grafik des öffentlichen Schlüssels an, der vom host_server_to_connect empfangen wurde (gemäß dem in den Optionen angegebenen Hash-Algo). Es ist dasselbe wie nur ssh, jedoch mit mehr visuellen Optionen, sodass die Verbindung auf die gleiche Weise wie bei einer normalen ssh-Verbindung fortgesetzt wird.