Wo wird der SSH-Server-Fingerabdruck generiert / gespeichert?

44

Ich habe openssh-server installiert und einen Schlüssel mit erstellt ssh-keygen. Ich habe dann versucht, es mithilfe der lokalen Portweiterleitung zu testen ssh -L 8080:www.nytimes.com:80 127.0.0.1. Der von diesem Befehl bereitgestellte Schlüsselfingerabdruck ist jedoch nicht der Schlüsselfingerabdruck, den ich erhalte, wenn ich ihn erhalte ssh-keygen -l. Auch wenn ich mein .ssh-Verzeichnis lösche, erhalte ich immer noch denselben Fingerabdruck, mit dem ich nicht erstellt habe ssh-keygen. Gibt es einen anderen Schlüssel auf meinem System? Wo ist dieser Schlüssel? Wie kann ich diesen Schlüssel für openssh-server auswählen?

bsamek
quelle

Antworten:

58

Wenn Sie eine SSH-Sitzung durchführen, sind zwei verschiedene Schlüsselpaare (mit einem Fingerabdruck für jedes Paar) beteiligt. Einer ist der Schlüssel des Benutzers, der in gespeichert ist ~/.ssh. Die SSH-Schlüsselidentität des Benutzers wird manchmal als Anmeldeinformationen für die Anmeldung an einem anderen Computer verwendet (wenn Sie eine schlüsselbasierte Anmeldung eingerichtet haben).

Der andere ist der Schlüssel des SSH-Servers. Dies ist der Schlüssel, für den Sie den Fingerabdruck sehen, wenn Sie zum ersten Mal eine Verbindung zu einem anderen Server herstellen. Die Identität dieses Schlüssels wird verwendet, um sicherzustellen, dass Sie sich bei dem SSH-Server anmelden, den Sie beabsichtigen. Dies ist wichtig, wenn Sie Kennwörter verwenden, da Sie nicht versehentlich versuchen möchten, sich auf einem Computer eines Angreifers anzumelden. Der Angreifer erhält Ihr Kennwort, wenn Sie es eingeben. Der Angreifer kann sich dann auf dem Computer anmelden, von dem Sie dachten, dass Sie sich anmelden zu! (Dies ist als "Man in the Middle Attack" bekannt. ) Die Schlüssel, die ein SSH-Server verwendet, um sich bei der Anmeldung zu identifizieren, befinden sich in und haben normalerweise den Namen "Man in the Middle Attack" ./etc/ssh/ssh_host_rsa_key

Sie können tatsächlich ändern, wo der SSH-Server den Schlüssel in der Datei mit der Einstellung sucht ./etc/ssh/sshd_configHostKey /path/to/host/key

Standardmäßig ssh-keygenwird ein Schlüssel für den aktuellen Benutzer erstellt, der standardmäßig in gespeichert wird ~/.ssh. Das Format eines Benutzerschlüssels und eines Serverschlüssels ist dasselbe. Der Unterschied besteht darin, wo sie platziert werden und ob /etc/ssh/sshd_configeine HostKeyDirektive auf sie verweist. Wenn Sie das openssh-server-Paket installieren, werden automatisch Schlüssel für den Server generiert. Hierher kamen die Schlüssel mit dem unbekannten Fingerabdruck. Wenn Sie den Fingerabdruck des Schlüssels des SSH-Servers (RSA *) sehen möchten, können Sie ihn ausführen ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub.

* Es gibt verschiedene Verschlüsselungsalgorithmen. Jeder verwendet einen anderen Schlüssel. Häufig sind DSA (schwach), RSA (alter Standard) und ECDSA (neuer Standard).

Azendale
quelle
1
Die Google-Ergebnisse für "set ssh fingerprint" sind überraschend schlecht, obwohl diese Begriffe technisch inkorrekt sind. Gut, dass ich das bei ihnen gefunden habe.
Bart van Heukelom
4
Danke dafür. Ein Hinweis: 'sudo' wird nicht benötigt, wenn Sie ssh-keygen auf den öffentlichen Schlüssel zeigen. Das heißt: ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub. Bei meiner Installation war es auch der ECDSA-Schlüssel und nicht der RSA-Schlüssel, den der ssh-Dämon verwendete. Also musste ich ihn ausführen ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub.
John Clements
Gibt es ein Problem damit, die öffentlichen Schlüssel von meiner alten Festplatte abzurufen und in meiner neuen Installation zu verwenden und sie in / etc / ssh zu überschreiben? Ein Schlüssel ist ein Schlüssel, oder?
Adam
@Adam Ich sehe kein Problem damit. Das sollte helfen, Probleme zu vermeiden, wenn Sie sich remote anmelden und der Schlüssel geändert hat (was passiert, wenn Sie einen neuen Schlüssel neu installieren).
Azendale
3
Wenn ich sshab 14.04 zum ersten Mal eine Verbindung zu einem Host herstelle, wird der MD5-Fingerabdruck angezeigt. Um ssh-keygenaus 16.04 einen MD5-Fingerabdruck zu machen, müssen Sie die -E md5Option verwenden.
Jarno
14

SSH-Host-Schlüssel werden in gespeichert /etc/ssh/, die Sie im Allgemeinen nicht auswählen müssen. Diese Schlüssel wurden bei der Installation des openssh-server-Pakets generiert.

Sie können den Fingerabdruck der Schlüssel auflisten, ssh-keygen -l -f /etc/ssh/ssh_host_key.pubobwohl Sie diesen für jeden öffentlichen Schlüssel wiederholen müssen.

 

Ajmitch
quelle
7

ssh-keygengeneriert keinen SSH-Fingerabdruck auf Ihrem Server. Das wird vom SSH-Server generiert. ssh-keygenerstellt ein öffentliches / privates Schlüsselpaar für Ihr System, mit dem Sie später auf Ihren SSH-Server zugreifen können, ohne einen Klartext-Passcode an den Server senden zu müssen.

Der Fingerabdruck Ihres Servers wird offensichtlich nicht als Fingerabdruck des von Ihnen generierten öffentlichen / privaten Schlüsselpaars angezeigt, da sie voneinander getrennt sind.

Thomas Ward
quelle
3
Beachten Sie, dass Sie in der Lage sein sollten, SSH-Schlüssel für Ihren Server zu generieren (im Gegensatz zu dem, was Sie sagen), aber Sie müssen sie nur an der richtigen Stelle ablegen, damit sie für diesen Zweck verwendet werden.
Azendale