In diesem Artikel haben wir unsere besten Tipps für eine effektivere Nutzung von SSH zusammengestellt. Sie erfahren, wie man:
- einen zweiten Faktor zur SSH-Anmeldung hinzufügen
- agent forwarding sicher nutzen
- eine blockierte SSH-Sitzung beenden
- ein Terminal permanent offen halten
- eine Remote-Terminalsitzung mit einem Freund teilen (ohne Zoom!)
einen zweiten Faktor für Ihr SSH hinzufügen
Sie können auf fünf verschiedene Arten einen zweiten Authentifizierungsfaktor für Ihre SSH-Verbindungen hinzufügen:
- Aktualisieren Sie Ihr OpenSSH und verwenden Sie einen Sicherheitsschlüssel. Im Februar 2020 wurde die Unterstützung von FIDO U2F (Universal Second Factor) Verschlüsselungsschlüsseln zu OpenSSH hinzugefügt. Dies ist eine großartige neue Funktion, aber es gibt einen Haken: Nur die Clients und Server, die auf die Version OpenSSH 8.2 oder höher aktualisiert wurden, können die Verschlüsselungsschlüssel nutzen, da das Februar-Update neue Schlüsseltypen für sie einführt. Mit dem Befehl
ssh –Vkönnen Sie die Client-Version von SSH überprüfen, und die Serverversion mit dem Befehlnc [servername] 22
Die Februarversion hat zwei neue Schlüsseltypen eingeführt – ecdsa-sk und ed25519-sk (neben den entsprechenden Zertifikaten). Um eine Schlüsseldatei zu generieren, geben Sie einfach Ihren Sicherheitsschlüssel ein und führen Sie den Befehl aus:$ ssh-keygen -t ecdsa-sk -f ~/..ssh/id_ecdsa_skEs wird ein öffentliches und ein geheimes Schlüsselpaar erstellt und mit Ihrem U2F-Gerät verknüpft. Die Aufgabe des geheimen Schlüssels auf dem U2F-Gerät besteht darin, den geheimen Schlüsseldescriptor auf der Festplatte zu entschlüsseln, wenn der Verschlüsselungsschlüssel aktiviert ist.
Außerdem können Sie einen Code für Ihre Schlüssel als sekundären Faktor bereitstellen.
Ein Resident Key ist eine weitere unterstützte OpenSSH-Generierungsmethode für -sk-Schlüssel. Bei diesem Ansatz wird der Descriptor auf dem U2F-Gerät gespeichert, was es Ihnen ermöglicht, ihn bei Bedarf mit dem Verschlüsselungsschlüssel zu verwenden. Sie können einen Resident Key mit folgendem Befehl erstellen:
$ ssh-keygen -t ecdsa-sk -O resident -f ~/..ssh/id_ecdsa_skUm den Descriptor auf einem neuen Gerät wieder in den Speicher zu laden, stecken Sie den Verschlüsselungsschlüssel ein und führen Sie den Befehl aus:
$ ssh-add -KBeim Verbinden mit dem Host müssen Sie den Verschlüsselungsschlüssel weiterhin aktivieren.
- Nutzen Sie PIV+PKCS11 und Yubikey. Um sich mit Geräten, die ältere SSHD-Versionen verwenden, über einen Verschlüsselungsschlüssel zu verbinden, ist ein anderer Ansatz erforderlich. Yubico hat ein Handbuch zur Verwendung von U2F+SSH mit PIV/PKCS11 (englisch). Dies ist nicht dasselbe wie FIDO U2F, und obwohl die Methode funktioniert, erfordert es viel Mühe, herauszufinden, welche Magie dahinter steckt.
- Verwenden Sie den benutzerdefinierten yubikey-agent ssh-Agent. Filippo Valsera hat einen SSH-Agenten für Yubikeys geschrieben. Er ist ganz neu und bietet minimale Funktionen.
- Verwenden Sie Touch ID und sekey. Sekey ist ein Open-Source-SSH-Agent, der geheime Schlüssel in einem geschützten Enklave des Mac speichert und die Verwendung von Touch ID für den Zugriff ermöglicht.
- Verwenden Sie Single Sign On SSH. Ich habe ein Tutorial geschrieben, um bei der Einrichtung dieser Methode zu helfen (englisch). Ein Vorteil von Single Sign On SSH ist die Möglichkeit, die Sicherheitsrichtlinien Ihres Identitätsanbieters zu nutzen — einschließlich Unterstützung für Multi-Faktor-Authentifizierung (MFA).
Sichere Verwendung von Agent Forwarding
Mit SSH-Agentenweiterleitung kann ein Remote-Host auf den SSH-Agenten Ihres lokalen Geräts zugreifen. Wenn Sie SSH mit aktivierter Agentenweiterleitung (normalerweise über ssh -A) verwenden, gibt es zwei Kanäle in der Verbindung: Ihre interaktive Sitzung und der Kanal für die Agentenweiterleitung. Über diesen Kanal verbindet sich der von Ihrem lokalen SSH-Agenten erstellte Unix-Socket mit dem Remote-Host. Dies ist ein riskantes Verfahren, da ein Benutzer mit Root-Zugriff auf dem Remote-Gerät potenziell auf Ihren lokalen SSH-Agenten zugreifen und sich im Netzwerk als Sie ausgeben kann. Wenn Sie den standardmäßigen SSH-Agenten aus dem Open-SSH-Paket verwenden, werden Sie nicht einmal bemerken, dass es passiert ist. Das Vorhandensein eines U2F-Schlüssels (oder Sekey) wird Ihnen helfen, effektiv alle Versuche, Ihren SSH-Agenten von außen zu nutzen, zu blockieren.
Selbst mit dieser Vorsichtsmaßnahme ist es eine gute Idee, die Agentenweiterleitung so selten wie möglich zu verwenden. Verwenden Sie sie nicht in jeder Sitzung — nutzen Sie die Agentenweiterleitung nur, wenn Sie sich sicher sind, dass sie für die aktuelle Sitzung notwendig ist.
Beenden einer hängenden Sitzung
Netzunterbrechungen, unkontrolliertes Programmverhalten oder Steuersequenzen, die die Tastatureingabe blockieren, sind alles mögliche Ursachen für das Abbrechen von SSH-Sitzungen.
Ein eingefrorenes Sitzung kann auf mehrere Arten beendet werden:
- Automatisches Abmelden bei Netzwerkunterbrechungen. Fügen Sie Folgendes zu Ihrer .ssh/config hinzu:
ServerAliveInterval 5 ServerAliveCountMax 1ssh sendet alle ServerAliveInterval Sekunden ein Echo an den Remote-Knoten, um die Verbindung zu überprüfen. Wenn mehr als ServerAliveCountMax Echos keine Antwort erhalten, beendet ssh die Verbindung wegen Timeout und meldet sich ab.
- Aus der Sitzung ausbrechen. ssh verwendet standardmäßig das Zeichen ~ (Tilde) als Steuerzeichen. Der Befehl ~. schließt die geöffnete Verbindung und bringt Sie zurück zum Terminal. (Steuersequenzen können nur in einer neuen Zeile eingegeben werden.) Der Befehl ~? gibt eine vollständige Liste der verfügbaren Befehle in dieser Sitzung aus. Beachten Sie, dass es notwendig sein kann, die ~-Taste auf internationalen Tastaturen zweimal zu drücken, um das Zeichen ~ einzugeben.
Warum kommt es überhaupt zu eingefrorenen Sitzungen? In der Zeit, als das Internet entstand, waren Computer selten mobil. Wenn Sie Laptops verwenden und zwischen verschiedenen IPv4-WLAN-Netzwerken wechseln, ändert sich Ihre IP-Adresse. Da SSH auf TCP-Verbindungen angewiesen ist, die wiederum auf einen Endpunkt mit stabiler IP-Adresse angewiesen sind, verlieren Ihre SSH-Verbindungen jedes Mal, wenn Sie die Netzwerke wechseln, ihren Socket-Descriptor und gehen tatsächlich verloren. Wenn sich Ihre IP-Adresse ändert, benötigt Ihr Netzwerk-Stack Zeit, um den Verlust des Descriptors zu erkennen. Bei Netzwerkstörungen wollen wir nicht, dass einer der Knoten in der TCP-Verbindung sie zu früh unterbricht. Daher wird der Protokoll versuchen, die Daten mehrere Male erneut zu senden, bevor es schließlich aufgibt. In der Zwischenzeit wird Ihre Sitzung im Terminal eingefroren erscheinen. IPv6 fügt einige mobilitätsbezogene Funktionen hinzu, die es dem Gerät ermöglichen, seine Heimatadresse während des Netzwerkwechsels beizubehalten. Vielleicht wird das eines Tages kein so großes Problem mehr sein.
Wie man eine permanente Sitzung auf einem entfernten Knoten offen hält
Es gibt zwei verschiedene Ansätze, um eine Verbindung beim Wechsel zwischen verschiedenen Netzwerken oder beim vorübergehenden Trennen aufrechtzuerhalten.
1. Verwenden Sie oder
Wenn Sie wirklich eine Verbindung benötigen, die nicht abreißt, selbst wenn Sie zwischen Netzwerken wechseln, verwenden Sie die mobile Shell Mosh. Dies ist eine sichere Shell, die zunächst ein SSH-Handschlag verwendet und dann auf ihren eigenen verschlüsselten Kanal für die Dauer der Sitzung wechselt. Auf diese Weise schafft Mosh einen separaten, sehr robusten und sicheren Kanal, der sowohl Internetunterbrechungen als auch einen Wechsel der IP-Adresse Ihres Laptops sowie schwerwiegende Netzwerkunterbrechungen und vieles mehr bewältigen kann — und das alles dank der Magie der UDP-Verbindungen und des verwendeten Mosh-Synchronisationsprotokolls.
Um Mosh zu verwenden, müssen Sie es sowohl auf dem Client als auch auf dem Server installieren und die Ports 60000-61000 für unzuverlässigen UDP-Verkehr zu Ihrem Remote-Host öffnen. Für die Verbindung müssen Sie künftig nur mosh user@server.
Mosh arbeitet auf der Ebene von Bildschirmen und Tasteneingaben, was ihm eine Reihe von Vorteilen gegenüber dem Standard-Input-Output-basierten binären Stream zwischen Client und SSH-Server verschafft. Wenn wir nur Bildschirme und Tasteneingaben synchronisieren müssen, wird es viel einfacher, eine unterbrochene Verbindung später wiederherzustellen. Während SSH alles, was passiert ist, puffert und sendet, genügt es Mosh, Tasteneingaben zu puffern und den letzten Frame des Terminalfensters mit dem Client zu synchronisieren.
2. Tmux verwenden
Wenn Sie möchten, dass Sie "kommen und gehen können, wann immer Sie wollen" und eine Terminal-Sitzung auf einem Remote-Host halten, verwenden Sie tmux. Ich liebe tmux und benutze es ständig. Wenn Ihre SSH-Verbindung unterbrochen wird, genügt es, sich erneut zu verbinden und einzugeben, tmux attach. Außerdem bietet es wunderbare Funktionen wie interaktive Tabs und Fenster, ähnlich den Tabs im iOS-Terminal, sowie die Möglichkeit, Terminals mit anderen zu teilen.
Einige verschönern ihren tmux mit Byobu, einem Paket, das die Benutzerfreundlichkeit von tmux erheblich verbessert und viele Tastenkombinationen hinzufügt. Byobu ist in Ubuntu enthalten und lässt sich mit Homebrew einfach auf einem Mac installieren.
Teilen einer Remote-Terminalsitzung mit einem Freund
Manchmal kann beim Debuggen komplexer Probleme auf Ihren Servern der Wunsch aufkommen, eine SSH-Sitzung mit jemandem zu teilen, der nicht im selben Raum wie Sie ist. tmux eignet sich perfekt für diese Aufgabe! Es sind nur wenige Schritte erforderlich:
- Stellen Sie sicher, dass tmux auf Ihrem Bastion-Host oder einem Server, mit dem Sie arbeiten möchten, installiert ist.
- Sie beide müssen sich per SSH mit dem Gerät verbinden, indem Sie ein gemeinsames Konto verwenden.
- Einer von Ihnen sollte tmux starten, um eine tmux-Sitzung zu beginnen.
- Der andere sollte tmux attach ausführen.
- Voila! Sie haben ein gemeinsames Terminal.
Wenn Sie an ausgeklügelteren Mehrbenutzer-tmux-Sitzungen interessiert sind, probieren Sie tmate aus, einen Fork von tmux, der die gemeinsamen Terminal-Sitzungen erheblich vereinfacht.
Quelle: habr.com
