Sicheres SSH mit Kryptonite auf DigitalOcean

Einführung

SSH ist der primäre Weg, um eine Verbindung zu Remote-Linux-Servern herzustellen. Die Sicherung dieses Kanals ist für die Aufrechterhaltung einer sicheren Infrastruktur von wesentlicher Bedeutung. Die gebräuchlichste Methode zur Authentifizierung bei einem Remoteserver über SSH ist die Verwendung von öffentlichen / privaten Schlüsselpaaren. Fügen Sie den öffentlichen Schlüssel zur Liste der autorisierten Schlüssel auf dem Remote-Server hinzu, und Sie können loslegen.

Die schwierigere Frage ist, wie Sie Ihren privaten Schlüssel sicher aufbewahren können.

In der Regel speichern Entwickler ihre privaten Schlüssel im Verzeichnis~/.ssh. Sie können Ihren privaten Schlüssel jedoch mit einem einfachen Befehlcat ~/.ssh/id_rsa lesen. Jede Anwendung auf Ihrem Computer kann möglicherweise Ihren privaten SSH-Schlüssel lesen, auch wenn er mit einer Passphrase verschlüsselt ist.

Eine übliche Lösung für dieses Sicherheitsrisiko ist das Hinzufügen eines zweiten Faktors (d. H. Aktivieren vonmulti-factor authentication, or MFA). Dies hat zwei Nachteile: Einrichtungskosten und Benutzerfreundlichkeit. Für jeden von Ihnen erstellten Server müssen Sie den OpenSSH-Server so konfigurieren, dass er das OATH-TOTP-PAM-Modul verwendet und das gemeinsam genutzte Geheimnis darauf lädt. Dies ist ein zeitaufwändiger Prozess und es gibt viele Stellen, an denen Fehler gemacht werden können. Außerdem müssen Sie jedes Mal, wenn Sie SSH auf Ihrem Server ausführen, eine App auf Ihrem Telefon öffnen, einen sechsstelligen Code lesen und in Ihr Terminal eingeben. Dies kann Ihren Workflow erheblich verlangsamen.

Um die Nachteile der Konfiguration von MFA zu vermeiden, verwenden Entwickler häufig USB-Hardware-Sicherheitsmodule (HSMs) wie NitroKey oder YubiKey, um öffentlich-private SSH-Schlüsselpaare zu generieren und zu speichern. Dies sind kleine USB-Geräte, die Ihr SSH-Schlüsselpaar enthalten. Jedes Mal, wenn Sie eine SSH-Verbindung zu einem Server herstellen möchten, schließen Sie das USB-Gerät an Ihren Computer an und drücken eine Taste am Gerät.

Aber HSMs sind teuer; SSH-kompatible Geräte kosten bis zu 50 USD. Es ist ein weiteres Gerät, das Sie mit sich herumtragen können. Jedes Mal, wenn Sie SSH an einen Server anschließen, müssen Sie ein USB-Gerät an Ihren Computer anschließen und eine physische Taste darauf drücken. Außerdem haben USB-HSMs in der Regel keinen Bildschirm. Sie wissen also nicht, welche Anmeldung Sie tatsächlich genehmigen, und es gibt keine Möglichkeit, ein Überwachungsprotokoll darüber anzuzeigen, bei dem Sie sich authentifiziert haben.

Kryptonite ist eine neue Lösung zum Schutz Ihres privaten SSH-Schlüssels. Es ist kostenlos, einfach einzurichten, benutzerfreundlich und verfügt über zusätzlichen integrierten Sicherheitsschutz. Es sind keine serverseitigen Änderungen erforderlich, und Sie können Anmeldeanforderungen über Push-Benachrichtigungen an Ihr Telefon genehmigen (ohne eine App zu öffnen). Bekannte Hosts sind immer bei Ihnen auf Ihrem Telefon, egal von welchem ​​Computer oder Server aus Sie SSH-Verbindungen herstellen.

In diesem Handbuch erstellen Sie ein SSH-Schlüsselpaar mit Kryptonite auf Ihrem Telefon, koppeln Ihr Telefon mit Ihrem lokalen Computer und verwenden Kryptonite, um SSH in ein DigitalOcean Droplet zu integrieren.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

  • Ein DigitalOcean Droplet, auf dem eine beliebige Linux-Distribution ausgeführt wird.

  • Ein Smartphone: iPhone (iOS 9.1 oder höher) oder Android (6.0 oder höher).

  • Ein PC, auf dem macOS (10.10 oder höher), Ubuntu, Debian, RHEL, CentOS, Fedora oder Kali Linux ausgeführt werden.

[[Schritt 1 - Generieren eines Kryptonit-Schlüsselpaars]] == Schritt 1 - Generieren eines Kryptonit-Schlüsselpaars

Der erste Schritt besteht darin, die Kryptonite-App herunterzuladen, indem Sie auf Ihrem iOS- oder Android-Telefon zuget.krypt.co wechseln.

Sobald die App installiert ist, öffnen Sie sie und tippen Sie aufGenerate Key Pair, um Ihr Kryptonite SSH-Schlüsselpaar zu erstellen. Geben Sie eine E-Mail ein, wenn Sie Ihren öffentlichen Schlüssel damit identifizieren möchten (oder überspringen Sie diesen Schritt).

Als Nächstes müssen Sie das Befehlszeilenprogramm von Kryptonite installieren.

[[Schritt-2 -—- Installation-kr]] == Schritt 2 - Installation vonkr

Der nächste Schritt wird auf Ihrem lokalen Computer fortgesetzt. Sie müssenkr command line utility installieren, damit sich SSH mit einem in Kryptonite gespeicherten Schlüssel authentifizieren kann. Sie könnenkr mit Ihrem bevorzugten Paketmanager installieren (wienpm oder`brew) or simply use `curl, wie wir es hier tun werden.

Wenn Sie aus Sicherheitsgründen das Installationsskript vor der Installation überprüfen möchten, können Siecurl https://krypt.co/kr > install_kr ausführen und einen Blick darauf werfen. Weitere Informationen zur Funktionsweise und zu alternativen Installationsmöglichkeiten inthe kr documentation finden Sie hier.

Wenn Sie bereit sind, installieren Siekr.

curl https://krypt.co/kr | sh

Sie werden aufgefordert, Push-Benachrichtigungen zu aktivieren. Dies ist erforderlich, damit Kryptonite Anmeldebewilligungsanfragen über Push-Benachrichtigungen senden kann.

Nachdem Sie die Anwendung, ein Schlüsselpaar undkr haben, besteht der nächste Schritt darin, Ihren Computer mit Kryptonite zu koppeln.

[[Schritt 3 - Kryptonit mit Ihrem Computer koppeln]] == Schritt 3 - Kryptonit mit Ihrem Computer koppeln

Führen Sie nach erfolgreicher Installation vonkr Folgendes aus:

kr pair

Ein QR-Code wird im Terminal angezeigt. Wenn Ihr Terminalfenster klein ist, müssen Sie es möglicherweise vergrößern, damit der gesamte QR-Code sichtbar ist, oder die Schrift verkleinern.

Tippen Sie in der Kryptonite-App am unteren Bildschirmrand aufAllow Camera Access. Scannen Sie den QR-Code im Terminal, sobald die Kamera angezeigt wird. Nach einigen Sekunden zeigt die Kryptonite-App eine erfolgreiche Kopplung an und das Terminal druckt Ihren öffentlichen Kryptonite-SSH-Schlüssel aus.

Testen wir, ob dieses Schlüsselpaar funktioniert.

[[Schritt 4 - Testen von SSH mit Kryptonit]] == Schritt 4 - Testen von SSH mit Kryptonit

Um zu überprüfen, ob alles funktioniert, versuchen Sie SSHing auf dem öffentlichenme.krypt.co-Server:

ssh me.krypt.co

In der Kryptonite-App wird eine Anfrage angezeigt, in der Sie aufgefordert werden, eine SSH-Authentifizierung mit drei Optionen zu genehmigen:

  • Allow Once genehmigt nur diese eine Anforderung, sich beime.krypt.co anzumelden.

  • Allow for 1 hour genehmigt diese Anforderung und jede zweite SSH-Anmeldeanforderung vom gekoppelten Computer für die nächste Stunde. Sie werden weiterhin benachrichtigt, wenn diese Anmeldungen erfolgen, sie werden jedoch automatisch genehmigt.

  • Reject verwirft diese Anforderung und die SSH-Anmeldung schlägt auf Ihrem Computer fehl (oder greift auf lokale Schlüssel zurück).

Tippen Sie aufAllow Once. Sie sehen eine erfolgreiche SSH-Anmeldung beime.krypt.co, die schnell aus der Pseudo-Shell austritt und das Schild-Logo anzeigt.

Wenn Sie Ihr Gerät sperren und erneut versuchen, SSH aufme.krypt.co zu setzen, wird eine Push-Benachrichtigung mit dem beabsichtigten Befehl an Ihr Gerät gesendet, in der Sie auf dem Sperrbildschirm um Ihre Zustimmung gebeten werden.

[[Schritt-5 - Hinzufügen Ihres Kryptonit-Pubkeys zum Digitalocean]] == Schritt 5 - Hinzufügen Ihres Kryptonite-Pubkeys zu DigitalOcean

Nachdem Kryptonite mit Ihrem Computer gekoppelt wurde, können Sie Ihren öffentlichen Schlüssel schnell zu allen Servern und Tools hinzufügen, die Sie über SSH verwenden.

Führen Sie den folgenden Befehl aus, um Ihren öffentlichen Schlüssel zu DigitalOcean hinzuzufügen:

kr digitalocean

Sie sehen die Ausgabe mit Anweisungen, die für DigitalOcean spezifisch sind, wie folgt:

OutputPublic key copied to clipboard.
Press ENTER to open your web browser to DigitalOcean.
Then click “Add SSH Key” and paste your public key.

Folgendes müssen Sie als Nächstes tun:

  1. Drücken SieENTER von Ihrem Terminal aus, um automatisch zu Ihrer DigitalOcean-Einstellungsseite zu navigieren und sich bei Bedarf anzumelden.

  2. Klicken Sie aufAdd SSH Key.

  3. Fügen Sie Ihren öffentlichen Kryptonite-Schlüssel ein.

  4. Klicken Sie aufSave.

Detaillierte Anweisungen zum Hinzufügen Ihres SSH-Schlüssels finden Sie inStep 3 of this SSH on DigitalOcean tutorial.

Das Hochladen Ihres Schlüssels zu DigitalOcean erleichtert das Hinzufügen zu einem neuen Droplet. Wählen Sie einfach das Kästchen für Ihren Kryptonite-Schlüssel aus, wenn Sie den Server erstellen. Als Nächstes fügen wir diesen Schlüssel einem vorhandenen Droplet hinzu.

[[Schritt-6 - Hinzufügen Ihres Kryptonit-Pubkeys zu einem vorhandenen Tröpfchen] == Schritt 6 - Hinzufügen Ihres Kryptonite-Pubkeys zu einem vorhandenen Tröpfchen

Mit dem Befehlszeilentoolkrkönnen Sie Ihren öffentlichen Kryptonite-Schlüssel zu einem bereits ausgeführten Droplet hinzufügen, auf das Sie mit einem lokalen SSH-Schlüssel oder einem Kennwort zugreifen können.

Führen Sie den folgenden Befehl aus, um Ihren öffentlichen Kryptonite-Schlüssel zur Datei der berechtigten Benutzer des Droplets hinzuzufügen, und stellen Sie dabei sicher, dass Sie Ihren Benutzernamen und die IP-Adresse Ihres Droplets eingeben.

kr add user@your_server_ip

Sobald Sie dies getan haben, testen Sie, ob es funktioniert, indem Sie versuchen, SSH einzurichten.

ssh user@your_server_ip

Sie erhalten eine Kryptonite SSH-Anmeldeanforderung auf Ihrem Telefon.

Fazit

Nachdem Sie Kryptonite eingerichtet und Ihren öffentlichen Kryptonite-Schlüssel erfolgreich zu Ihrem DigitalOcean-Konto hinzugefügt haben, können Sie jetzt von jedem gekoppelten Computer aus SSH in eines Ihrer Droplets ausführen.

Ihr privater Schlüssel ist sicher auf Ihrem Telefon gespeichert und verlässt Ihr Gerät nie. Wenn Sie eine Anforderung zulassen, wird der private Schlüssel zum kryptografischen Signieren einer SSH-Anmeldung auf Ihrem Gerät verwendet. Diese Signatur wird dann an Ihren Computer zurückgesendet, um die SSH-Authentifizierung abzuschließen.

Weitere Informationen zur Funktionsweise von Kryptonite finden Sie unterKryptonite’s system architecture blog post undKryptonite and kr source code.