ssh-keyscan sammelt die öffentlichen Host-Schlüssel eines SSH-Servers, ohne sich anzumelden — die Grundlage, um known_hosts automatisch zu befüllen. Es gehört zum OpenSSH-Paket und wird häufig in Skripten und Automatisierungen genutzt.

Grundbefehl

ssh-keyscan server.example.com

Der Befehl verbindet sich zum SSH-Port (Standard 22) und gibt die gefundenen Schlüssel im known_hosts-Format aus. Mehrere Hosts sind möglich: ssh-keyscan host1 host2. Mit -p 2222 lässt sich ein abweichender Port angeben.

Typische Verwendung

ssh-keyscan server.example.com >> ~/.ssh/known_hosts

So lässt sich die Host-Key-Abfrage beim ersten Verbinden überspringen — praktisch für Skripte, CI-Pipelines und die Einrichtung vieler Rechner. Mit -H werden Einträge gehasht gespeichert (Standard bei neueren OpenSSH-Versionen).

Sicherheit

  • TOFU-Problem: Beim allerersten Abruf kennt der Client den Server noch nicht — ein Angreifer könnte sich einschleichen. Die gesammelten Schlüssel daher über einen vertrauenswürdigen Kanal verifizieren, bevor man ihnen vertraut.
  • Mit StrictHostKeyChecking lässt sich steuern, wie der Client mit unbekannten oder geänderten Schlüsseln umgeht — in Produktion immer yes (bzw. accept-new nur für neue Einträge).
  • Alternativ zu known_hosts werden die authorized_keys des Servers gepflegt — dort stehen die Schlüssel der Benutzer, nicht die des Servers.

Verwandte Grundlagen: SSH, ssh-keygen, known_hosts und authorized_keys.