GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welchen Befehl verwende ich, um zu sehen, was der ECDSA-Schlüsselfingerabdruck meines Servers ist?

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 die ssh-keyscan Befehl)
  • ssh-keyscan schreibt auf stderr , nicht stdout (!), daher der bash 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 an ssh-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

Linux
  1. Verwenden Sie das Linux-Terminal, um zu sehen, welche Dateien sich auf Ihrem Computer befinden

  2. So verwenden Sie den Linux-Grep-Befehl

  3. So verwenden Sie den Verlaufsbefehl unter Linux

  4. Wie verwende ich den basename-Befehl?

  5. Was ist die Verwendung von $ # in Bash

Was ist der Linux-Überwachungsbefehl + Beispiele

So verwenden Sie den Linux-Ping-Befehl

Was ist ein SSH-Befehl und wie wird SSH verwendet, um eine Verbindung zum Remote-Server herzustellen?

Was ist der Kill-Befehl in Linux?

Was ist die Logjam-Schwachstelle?

Verwendung des grep-Befehls unter Linux