Gibt es eine Möglichkeit , einen SSH-Serverschlüssel-Fingerabdruck programmgesteuert abzurufen, ohne sich bei ihm zu authentifizieren ?
Ich versuche es ssh -v user@host false 2>&1 | grep "Server host key"
, aber dies hängt und wartet auf ein Passwort, wenn keine schlüsselbasierte Authentifizierung eingerichtet ist.
ssh-keygen -l -f - <(ssh-keyscan host)
doch?ssh-keyscan host | ssh-keygen -lf -
ssh-keygen -l -f <(ssh-keyscan host)
ssh-keygen -l -f -
funktioniert wie erwartet in ssh-keygen 7.2 und höher. Es werden einige Kommentarzeilen zu STDERR erstellt, die herausgefiltert werden können, wie in der Antwort von Anthony Geoghegan oderssh-keyscan host 2>/dev/null | ssh-keygen -l -f -
Ich musste dies vor kurzem selbst tun, daher dachte ich, ich würde eine Antwort hinzufügen, die zeigt, wie dies (mit Versionen von OpenSSH 7.2 oder neuer ) in einer Zeile unter Verwendung der Prozessersetzung getan werden kann:
Der folgende Text erläutert die Funktionsweise dieser Befehle und hebt einige Unterschiede im Verhalten älterer und neuerer Versionen der OpenSSH-Dienstprogramme hervor.
Holen Sie sich öffentliche Host-Schlüssel
Der
ssh-keyscan
Befehl wurde entwickelt, damit Benutzer öffentliche Hostschlüssel erhalten können, ohne sich beim SSH-Server authentifizieren zu müssen. Von seiner Manpage:Schlüsselart
Die Art des abzurufenden Schlüssels wird mit der
-t
Option festgelegt.rsa1
(veraltetes SSH-Protokoll Version 1)rsa
dsa
ecdsa
(neueste Versionen von OpenSSH)ed25519
(neueste Versionen von OpenSSH)In modernen OpenSSH-Releases müssen standardmäßig die Schlüsseltypen
rsa
(seit Version 5.1),ecdsa
(seit Version 6.0) unded25519
(seit Version 6.7) abgerufen werden .In älteren Versionen von
ssh-keyscan
(vor OpenSSH Version 5.1) war der Standardschlüsseltyp veraltetrsa1
(SSH-Protokoll 1), sodass die Schlüsseltypen explizit angegeben werden müssten:Holen Sie sich Fingerabdruck-Hashes von Base64-Schlüsseln
ssh-keyscan
druckt den Host-Schlüssel des SSH-Servers im Base64-codierten Format. Um dies in einen Fingerabdruck-Hash umzuwandeln, kann dasssh-keygen
Dienstprogramm mit seiner-l
Option verwendet werden, um den Fingerabdruck des angegebenen öffentlichen Schlüssels zu drucken.Bei Verwendung von Bash, Zsh (oder der Korn-Shell) kann die Prozessersetzung für einen praktischen Einzeiler verwendet werden:
Hinweis : In OpenSSH-Versionen vor 7.2 haben die
ssh-keygen
zum Lesen von Dateien verwendeten Funktionen Named Pipes (FIFOs) nicht sehr gut verarbeitet, sodass diese Methode nicht funktioniert und die Verwendung temporärer Dateien erforderlich ist.Hashing-Algorithmen
Aktuelle Versionen von SHA256 Fingerabdruck-Hashes der Tasten
ssh-keygen
drucken . Um MD5- Hashes der Serverschlüssel-Fingerabdrücke abzurufen (das alte Verhalten), kann die Option verwendet werden, um den Hash-Algorithmus anzugeben:-E
Pipeline verwenden
Wenn Sie eine POSIX-Shell (z. B.
dash
) ohne Prozessersetzung verwenden, funktionieren die anderen Lösungen mit temporären Dateien. In neueren Versionen von OpenSSH (seit 7.2) kann jedoch eine einfache Pipeline verwendet werden, dassh-keygen
sie-
als Dateinamen für den Standardeingabestream akzeptiert und einen einzeiligen Pipelinebefehl zulässt.quelle
ssh-keygen
von älteren Versionen von OpenSSH ein Problem beim Lesen aus dem FIFO / Named Pipe vorliegt. Ich werde das untersuchen (und meine Antwort aktualisieren), wenn ich etwas Freizeit habe.printf
Anweisungen in diedo_fingerprint()
Funktion verbracht hatte, stellte ich fest, dass mit OpenSSH-Versionen vor 7.2 diessh-keygen
zum Lesen von Dateien verwendeten Funktionen Named Pipes (FIFOs) nicht so gut handhabten Die Prozessersetzungsmethode würde nicht funktionieren.nmap
Bietet diese Möglichkeit mithilfe desssh-hostkey
Skripts.So geben Sie den hexadezimalen Fingerabdruck des Schlüssels zurück:
So geben Sie den Inhalt des Schlüssels zurück:
Zum Zurückkehren der visuellen Blase des Schlüssels
So geben Sie alle oben genannten Informationen zurück:
Quelle: nmap docs
quelle
-p
Option, einen Port anzugeben, z-p 22000
. Es ist auch möglich, die-vv
Option zu verwenden, um die Ausführlichkeit (Menge der angegebenen Informationen) zu erhöhenfilezilla zeigt mit md5 gehashte Schlüssel im Hexadezimalformat an .
Verwenden Sie diesen Befehl , um dies auf Ihrem Ubuntu-Linux- Computer zu finden :
Hinweis: Ersetzen Sie "localhost" durch die IP-Adresse des Computers, den Sie überprüfen möchten.
quelle
Hier ist ein Shell-Skript (hauptsächlich Bourne-Shell, aber mit
local
Schlüsselwörtern, die in den meisten modernen/bin/sh
Versionen verfügbar sind ), das ich dazu geschrieben habe. Benutze es wiessh-hostkey hostname
. Es werden sowohl die Fingerabdrücke im sha256- als auch im md5-Format für alle Hostschlüssel für den angegebenen Hostnamen oder die angegebene IP-Adresse angezeigt. Sie können auch manuell "md5
" oder "sha256
" als zweites Argument angeben, um nur dieses bestimmte Format anzuzeigen.Anstelle von Piping wird eine temporäre Datei verwendet, um die Kompatibilität mit älteren OpenSSH-Paketen zu gewährleisten (wie in anderen Antworten beschrieben). Die temporäre Datei verwendet
/dev/shm
(Shared Memory), falls verfügbar.quelle