it-swarm.com.de

Welchen Befehl verwende ich, um den ECDSA-Schlüsselfingerabdruck meines Servers zu ermitteln?

Ich sehe überall in Google, wie man den RSA-Schlüsselfingerabdruck erkennt, aber nicht den ECDSA-Fingerabdruck.

68
trusktr

Warten Sie, ich habe es gefunden. Führen Sie den Befehl aus:

ssh-keygen -l -f /etc/ssh/ssh_Host_ecdsa_key.pub
105
trusktr

Mit einem kürzlich erschienenen ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j, 10. Mai 2012) habe ich folgendes Skript erstellt:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

Anmerkungen:

  • wenn Ihr sshd auf einem benutzerdefinierten Port ausgeführt wird, fügen Sie dem Befehl -p portNumber 'ssh-keyscan hinzu.
  • ssh-keyscan Schreibt auf stderr, nicht auf stdout (!), Daher die bash - Umleitung '2>&1' Schale)

Dies ist die Zeile, die ich zu meiner ~/.ssh/known_hosts - Datei hinzugefügt habe, um ssh-Anforderungen 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 Gibt den/die vollständigen öffentlichen Schlüssel des SSH-Servers an
  • 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 an ssh-keygen -l Weiter, wo der Fingerabdruck angezeigt wird.

Daniel fügt hinzu:

Fingerabdrücke aller öffentlichen Server-Schlüssel anzeigen, die in ~/.ssh/know_hosts Gespeichert sind:

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
14
VonC

Auf meinem System muss ich einen MD5-Schlüssel anstelle des Standard-SHA256 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.

7
David Elrod

verwendete Befehle

  • Zeigt den Namen des öffentlichen Hostschlüssels an, der auf dem Server gespeichert ist (auf der Serverseite, die Sie über ssh mit TO 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 des öffentlichen Host-Schlüssels des Remote-Servers (auf Client-Seite, den Sie über ssh mit FROM verbinden):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <Host_server_to_connect>
    

    - o: Option

    visualhostkey: visual (ascii-art)

    FingerprintHash: Hash-Algo zu verwenden

Was ist zu tun, um die Authentizität eines Hosts/Servers zu überprüfen?

Erstens muss 1. lokal auf dem Server ausgeführt werden (derjenige, zu dem Sie eine Verbindung über ssh herstellen möchten): Er gibt Ihnen einen ersten Überblick. Drucken Sie es aus oder machen Sie ein Foto.

Zweitens ist 2. bei der ersten SSH-Verbindung zu erledigen; es wird eine zweite ascii-art angezeigt. Wenn die Ascii-Kunst die gleiche ist, können Sie yes auf die "Traue ich?" Frage antworten (dh 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..    |
+-----------------+
  • Client-Seite
$ 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 eingeben. Die Datei, die Sie als Eingabe angeben, ist der öffentliche Host Schlüssel des Servers. Wenn ein Client eine Verbindung herstellt (nicht nur zum ersten Mal), sendet der Server seinen öffentlichen Host-Schlüssel. Dieser öffentliche Host-Schlüssel wird in ~/.ssh/known_hosts Gesucht. Befindet sich der öffentliche Schlüssel in der Datei, 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). Befindet sich der öffentliche Schlüssel nicht in der Datei, berechnet der Client den Fingerabdruck dieses öffentlichen Hostschlüssels mit einem Hash-Algorithmus (ein anderer Hash-Algorithmus gibt einen anderen Fingerabdruck aus). Dieser zuvor berechnete Fingerabdruck wird angezeigt (zusammen mit der entsprechenden Option (sofern verfügbar)) und Sie müssen mit Ja oder Nein antworten, je nachdem, ob Sie diesen Fingerabdruck erkennen oder nicht (dieser Fingerabdruck ist das Bild/der Hash des öffentlichen Hostschlüssels des Server). Wenn Sie Ja sagen, wird der öffentliche Schlüssel des Servers (nicht dessen Fingerabdruck) zur Datei ~/.ssh/known_hosts Hinzugefügt.

Wir können feststellen, dass sich ~/.ssh/known_hosts Unter Ihrem Home-Verzeichnis (~) befindet, weil Sie diesem Host (Server) vertraut, aber ein anderer Benutzer möglicherweise nicht demselben wie Sie vertraut. Außerdem ist der öffentliche Host-Schlüssel des Servers nicht benutzerabhängig und wird in /etc/ssh/ Gespeichert.

Der zweite Befehl zeigt den Fingerabdruck und das Ergebnis des öffentlichen Schlüssels an, der vom Host_server_to_connect empfangen wurde (gemäß dem in den Optionen angegebenen Hash-Algorithmus). Es ist dasselbe wie nur ssh, aber mit mehr visuellen Optionen, so dass die Verbindung genauso wie bei einer normalen ssh-Verbindung fortgesetzt wird.

2