Fügen Sie der SSH-Datei known_hosts sicher einen Host (z. B. GitHub) hinzu

20

Wie kann ich der SSH- known_hostsDatei sicher einen Hostschlüssel hinzufügen ?

Ich richte eine Entwicklungsmaschine ein und möchte (z. B.) verhindern, dass gitbeim Klonen eines Repositorys github.comSSH verwendet wird.

Ich weiß, dass ich StrictHostKeyChecking=no(z. B. diese Antwort ) verwenden kann, aber das ist nicht sicher.

Bisher habe ich gefunden ...

  1. GitHub veröffentlicht seine SSH-Key-Fingerabdrücke unter https://help.github.com/articles/github-s-ssh-key-fingerprints/

  2. Ich kann verwenden ssh-keyscan, um den Host-Schlüssel für zu bekommen github.com.

Wie verbinde ich diese Fakten? Wie überprüfe ich anhand einer vorab ausgefüllten Liste von Fingerabdrücken, ob die Ausgabe von ssh-keyscander known_hostsDatei hinzugefügt werden kann?


Ich schätze, ich frage Folgendes:

Wie erhalte ich den Fingerabdruck für einen zurückgegebenen Schlüssel ssh-keyscan?

Angenommen, ich bin bereits für SSH MITM- geprüft, kann aber der GitHub-HTTPS-Seite vertrauen (da sie eine gültige Zertifikatskette hat).

Das bedeutet, dass ich einige (verdächtige) SSH-Hostschlüssel (von ssh-keyscan) und einige (vertrauenswürdige) Fingerabdrücke habe. Wie überprüfe ich eins gegen das andere?


Verwandte: Wie hashe ich den Host-Teil der Ausgabe von ssh-keyscan? Oder kann ich gehashte / nicht gehashte Hosts einmischen known_hosts?

Roger Lipscombe
quelle
Warum wäre es für Ihren Anwendungsfall nicht sicher?
Vierfach
StrictHostKeyChecking=noist anfällig für MITM. Ist ssh-keyscansicher gegen MITM?
Roger Lipscombe
Ich kann nicht verstehen , warum ich übermäßig über jemanden besorgt bin ein Fremder Identitätswechsel ich nie , wen getroffen habe ich vertraue genug zu schreiben Code , den ich über den download and run bin ...
quadruplebucky
Weil dies mein Quellcode in einem privaten Repo auf Github ist und ich nicht möchte, dass eine MITM (z. B.) böswillige Änderungen einführt, wenn ich Commits drücke. Das ist nur ein Beispiel.
Roger Lipscombe
Ich (zum Guten oder Schlechten) entscheide mich dafür, Github zu vertrauen. Ich vertraue nicht jeder zufälligen Netzwerkverbindung zwischen mir und ihnen.
Roger Lipscombe

Antworten:

11

Der wichtigste Teil des "sicheren" Hinzufügens eines Schlüssels zur known_hostsDatei ist das Abrufen des Schlüsselfingerabdrucks vom Serveradministrator. Der Schlüsselfingerabdruck sollte ungefähr so ​​aussehen:

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

Bei GitHub können wir normalerweise nicht direkt mit einem Administrator sprechen. Sie platzieren den Schlüssel jedoch auf ihren Webseiten, damit wir die Informationen von dort wiederherstellen können.

Manuelle Schlüsselinstallation

1) Nehmen Sie eine Kopie des Schlüssels vom Server und holen Sie sich den Fingerabdruck. Hinweis: Tun Sie dies, bevor Sie den Fingerabdruck überprüfen.

$ ssh-keyscan -t rsa github.com | tee github-key-temp | ssh-keygen -lf -
# github.com:22 SSH-2.0-babeld-f3847d63
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

2) Fordern Sie vom Serveradministrator eine Kopie des Schlüsselfingerabdrucks an. Navigieren Sie in diesem Fall zu der Seite mit den Informationen auf github.com

  1. Gehen Sie zu github.com
  2. Gehen Sie auf die Hilfe - Seite (im Menü auf der rechten Seite, wenn Sie angemeldet, am unteren Rand der Homepage aus anderen Gründen ).
  3. Im Ersten Schritt Abschnitt geht mit SSH zu GitHub Connecting
  4. Gehen Sie zu Testen Ihrer SSH-Verbindung
  5. Kopieren Sie den SHA256-Fingerabdruck von dieser Seite zur späteren Verwendung in Ihren Texteditor.

3) Vergleichen Sie die Schlüssel der beiden Quellen

Indem Sie sie direkt übereinander in einem Texteditor platzieren, können Sie leicht feststellen, ob sich etwas geändert hat

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA) #key recovered from github website
2048 SHA256:nThbg6kXUpJ3Gl7E1InsaspRomtxdcArLviKaEsTGY8 github.com (RSA) #key recovered with keyscan

(Beachten Sie, dass der zweite Schlüssel manipuliert wurde, aber dem Original ziemlich ähnlich ist. Wenn so etwas passiert, werden Sie ernsthaft angegriffen und sollten sich an einen vertrauenswürdigen Sicherheitsexperten wenden.)

Wenn die Schlüssel unterschiedlich sind, brechen Sie den Vorgang ab und setzen sich mit einem Sicherheitsexperten in Verbindung

4) Wenn die Schlüssel korrekt verglichen werden, sollten Sie den bereits heruntergeladenen Schlüssel installieren

cat github-key-temp >> ~/.ssh/known_hosts

Oder für alle Benutzer auf einem System (als root) installieren:

cat github-key-temp >> /etc/ssh/ssh_known_hosts

Automatisierte Schlüsselinstallation

Wenn Sie während eines Erstellungsvorgangs einen Schlüssel hinzufügen müssen, befolgen Sie die Schritte 1-3 des obigen manuellen Vorgangs.

Nachdem Sie dies getan haben, überprüfen Sie den Inhalt Ihrer github-key-tempDatei und erstellen Sie ein Skript, um diesen Inhalt zu Ihrer bekannten Hosts-Datei hinzuzufügen.

if ! grep github.com ~/.ssh/known_hosts > /dev/null
then
     echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" >> ~/.ssh/known_hosts
fi

Sie sollten nun loswerden irgendwelche sshBefehle , die haben StrictHostKeyCheckingdeaktiviert.

Michael
quelle
17

Sie können hashed / unhashed-Einträge in Ihrer known_hosts-Datei mischen.

Wenn Sie also einen Github-Schlüssel hinzufügen möchten, können Sie Folgendes tun:

ssh-keyscan github.com >> ~/.ssh/known_hosts

Wenn Sie wollen, dass es gehasht wird, fügen Sie -H hinzu

ssh-keyscan -H github.com >> ~/.ssh/known_hosts

Wee
quelle
1
Was ist der Unterschied zwischen gehasht / ungehasht? Ich weiß, was Hashing ist, nur nicht, warum es in diesem Zusammenhang angewendet wird.
Glen Thomas
3
Durch das Hashing Ihrer Einträge können Sie Informationen zu den Hosts ausblenden, zu denen Sie eine Verbindung herstellen. Überprüfen Sie die akzeptierte Antwort auf security.stackexchange.com/questions/56268/…
Wee
4
Dies beantwortet die Frage nicht. Die Verwendung von ssh-keyscan unterliegt einem Angriff durch einen Mann in der Mitte. Dies bedeutet, dass der Schlüssel, den Sie speichern, ein Schlüssel des Angreifers sein kann, der versucht, in Ihr System einzudringen. In meiner Antwort finden Sie eine Möglichkeit, die Dinge zu überprüfen.
Michael
Att. Die Aufmerksamkeit auf Antworten zu lenken, die immer falsch waren - "die beiden besten Antworten sind tatsächlich unsicher"
Peter Mortensen,
6

Am einfachsten ist es, die Schlüssel manuell abzurufen ssh-keyscanund manuell zu überprüfen:

$ ssh-keyscan -t rsa github.com | ssh-keygen -lf -
# github.com:22 SSH-2.0-libssh-0.7.0
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

Fügen Sie sie Ihrem Skript hinzu, das dann den "maßgeblichen" öffentlichen Schlüssel enthält.

Jakuje
quelle
Ich habe die Schlüssel, wie Sie gesagt haben. Wie füge ich sie meinem Skript hinzu?
Glen Thomas
Entweder als separate Datei oder als Zeichenfolge in Ihrem Skript.
Jakuje
Diese Antwort ist gefährlich, weil es ein schwieriger Prozess ist, sie manuell zu überprüfen. Ich habe unten eine Antwort hinzugefügt, in der versucht wird, die Vorgehensweise zu erläutern und die Ergebnisse sicher zu verwenden.
Michael
Att. Die Aufmerksamkeit auf Antworten zu lenken, die immer falsch waren - "die beiden besten Antworten sind tatsächlich unsicher"
Peter Mortensen,
1
@ RogerLipscombe Ich bin damit einverstanden, dass die Antwort sicher interpretiert werden kann. "Manuell überprüfen" wird nicht erklärt, aber wenn Sie verstehen, dass dies "Befolgen der Anweisungen auf der SSH-Handbuchseite" bedeutet, ist das wahrscheinlich in Ordnung. Hier besteht das Risiko, dass jemand dies nicht versteht und beispielsweise unsichere Dinge wie das Überprüfen des Schlüssels nach dem Anmelden beim Server versucht. Aus diesem Grund habe ich diese Antwort als "gefährlich" und die andere als "unsicher" bezeichnet - das Detail, wie Sie manuell prüfen, ist das wichtigste Kriterium. Danke für's Annehmen.
Michael