In diesem Artikel haben wir unsere besten Tipps für eine effektivere Nutzung von SSH zusammengestellt. Sie erfahren, wie Sie:
- Einen zweiten Faktor für den SSH-Login hinzufügen
- Sicher agent forwarding nutzen
- Eine hängengebliebene SSH-Sitzung beenden
- Ein dauerhaft offenes Terminal behalten
- Eine Remote-Terminalsitzung mit einem Freund teilen (ohne Zoom!)
Einen zweiten Faktor für Ihr SSH hinzufügen
Fünf verschiedene Möglichkeiten gibt es, um einen zweiten Authentifizierungsfaktor zu Ihren SSH-Verbindungen hinzuzufügen:
- Aktualisieren Sie Ihr OpenSSH und verwenden Sie einen Verschlüsselungsschlüssel. Im Februar 2020 wurde die Unterstützung für FIDO U2F-Verschlüsselungsschlüssel (Universal Second Factor) in OpenSSH hinzugefügt. Dies ist eine großartige neue Funktion, aber es gibt einen Haken: Nur die Clients und Server, die auf OpenSSH 8.2 oder höher aktualisiert wurden, können diese Verschlüsselungsschlüssel verwenden, da das Februar-Update neue Schlüsseltypen für sie einführt. Mit dem Befehl
ssh –Vkann die Client-Version von SSH überprüft werden, während die Serverversion mit dem Befehlnc [servername] 22
überprüft werden kann. In der Februarversion wurden zwei neue Schlüsseltypen hinzugefügt — ecdsa-sk und ed25519-sk (zusammen mit den entsprechenden Zertifikaten). Um die Schlüsseldatei zu generieren, genügt es, Ihren Verschlüsselungsschlüssel einzufügen und den Befehl auszuführen:$ ssh-keygen -t ecdsa-sk -f ~\/ .ssh\/id_ecdsa_skDies erstellt öffentliche und private Schlüssel und bindet sie an Ihr U2F-Gerät. Die Aufgabe des privaten Schlüssels auf dem U2F-Gerät besteht darin, den geheimen Schlüsseldescriptor auf der Festplatte zu entschlüsseln, wenn der Verschlüsselungsschlüssel aktiv ist.
Darüber hinaus können Sie als sekundären Faktor eine Passphrase für Ihre Schlüssel bereitstellen.
Ein residenter Schlüssel ist ein weiterer von OpenSSH unterstützter Typ zur Generierung von -sk-Schlüsseln. Bei diesem Ansatz wird der Descriptor auf dem U2F-Gerät gespeichert und ermöglicht es Ihnen, ihn zusammen mit dem Verschlüsselungsschlüssel zu verwenden, wann immer es erforderlich ist. Einen residenten Schlüssel können Sie mit folgendem Befehl erstellen:
$ ssh-keygen -t ecdsa-sk -O resident -f ~\/ .ssh\/id_ecdsa_skAnschließend, um den Descriptor zurück ins Gedächtnis auf einem neuen Gerät zu bringen, fügen 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 immer noch aktivieren.
- Verwenden Sie PIV+PKCS11 und Yubikey. Für die Verbindung zu Geräten mit älteren SSHD-Versionen ist ein anderer Ansatz zur Verwendung des Verschlüsselungsschlüssels erforderlich. Auf Yubico gibt es eine Anleitung 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 dahintersteckt.
- Benutzerdefinierten Yubikey-Agent SSH-Agent verwenden. Filippo Valsorda hat einen SSH-Agenten für Yubikeys geschrieben. Es ist völlig neu und enthält die grundlegendsten Funktionen.
- Touch ID und Sekey verwenden. 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.
- Single Sign On SSH verwenden. Ich habe hier ein Tutorial geschrieben, um dabei zu helfen, diese Methode einzurichten (auf 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 Mehrfaktorauthentifizierung (MFA).
Sichere Verwendung von Agent Forwarding
In SSH ermöglicht Agent Forwarding einem entfernten Host, auf den SSH-Agent Ihres lokalen Geräts zuzugreifen. Wenn Sie SSH mit aktiviertem Agent Forwarding verwenden (normalerweise über ssh -A), gibt es zwei Kanäle in der Verbindung: Ihre interaktive Sitzung und einen Kanal für das Agent Forwarding. Über diesen Kanal verbindet sich das Unix-Socket, das von Ihrem lokalen SSH-Agent erstellt wurde, mit dem entfernten Host. Dies ist eine riskante Methode, da ein Benutzer mit Root-Rechten auf dem entfernten Gerät Zugriff auf Ihren lokalen SSH-Agent erhalten und sich potenziell im Netzwerk als Sie ausgeben kann. Wenn Sie den Standard-SSH-Agenten aus dem Open SSH-Paket verwenden, werden Sie nicht einmal bemerken, dass dies geschieht. Ein U2F-Schlüssel (oder Sekey) hilft Ihnen, alle Versuche, Ihren SSH-Agent von außen zu nutzen, effektiv zu blockieren.
Selbst mit dieser Vorsichtsmaßnahme ist es eine gute Idee, Agent Forwarding so selten wie möglich zu verwenden. Nutzen Sie es nicht bei jeder Sitzung — verwenden Sie Agent Forwarding nur, wenn Sie sich seiner Notwendigkeit für die aktuelle Sitzung sicher sind.
Abbruch einer blockierten Sitzung
Netzwerkunterbrechungen, unkontrolliertes Verhalten von Programmen oder eine Steuersequenz, die die Tasteneingabe blockiert, sind mögliche Gründe für einen Abbruch der SSH-Sitzung.
Eine blockierte Sitzung kann auf verschiedene Arten beendet werden:
- Automatisch bei Netzwerkunterbrechung abmelden. Fügen Sie in Ihrer .ssh/config Folgendes hinzu:
ServerAliveInterval 5 ServerAliveCountMax 1SSH sendet alle ServerAliveInterval Sekunden ein Echo an den entfernten Host, um die Verbindung zu überprüfen. Wenn nach ServerAliveCountMax Echos keine Antwort empfangen wird, beendet SSH die Verbindung nach Zeitüberschreitung und meldet sich von der Sitzung ab.
- Die Sitzung beenden. Standardmäßig verwendet ssh 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 in dieser Sitzung verfügbaren Befehle aus. Bitte beachten Sie, dass Sie auf internationalen Tastaturen möglicherweise die Taste ~ zweimal drücken müssen, um das Zeichen ~ einzugeben.
Warum kommt es überhaupt zu hängenden Sitzungen? Zur Zeit der Entstehung des Internets bewegten sich Computer selten von ihrem Platz. Bei der Nutzung von Laptops und dem Wechsel zwischen mehreren IPv4-WLAN-Netzen ändert sich Ihre IP-Adresse. Da SSH auf TCP-Verbindungen angewiesen ist und diese auf einem Endpunkt mit stabiler IP-Adresse beruhen, verlieren Ihre SSH-Verbindungen jedes Mal, wenn Sie zwischen Netzwerken wechseln, den Socket-Deskriptor und gehen tatsächlich verloren. Wenn Ihre IP-Adresse wechselt, benötigt Ihr Netzwerk-Stack Zeit, um den Verlust des Deskriptors zu erkennen. Bei Netzwerkproblemen wollen wir nicht, dass ein Knoten in einer TCP-Verbindung sie zu früh abbricht. Daher versucht das Protokoll, die Daten mehrere Male erneut zu senden, bevor es schließlich aufgibt. In der Zwischenzeit wird Ihre Sitzung in Ihrem Terminal feststecken. IPv6 fügt einige mobilitätsbezogene Funktionen hinzu, die es dem Gerät ermöglichen, die Heimatadresse während des Netzwerkwechsels beizubehalten. Möglicherweise wird dies eines Tages kein so großes Problem mehr sein.
Wie man ein permanentes Terminal auf einem Remote-Knoten offen hält
Es gibt zwei verschiedene Ansätze, um die 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 abbricht, selbst wenn Sie zwischen Netzwerken wechseln, verwenden Sie die mobile Shell Mosh. Es handelt sich um eine sichere Shell, die zunächst ein SSH-Handshake durchführt und dann auf ihren eigenen verschlüsselten Kanal für die gesamte Sitzung wechselt. So schafft Mosh einen separaten, sehr widerstandsfähigen und geschützten Kanal, der sowohl Internetunterbrechungen als auch den Wechsel der IP-Adresse Ihres Laptops sowie erhebliche Netzwerkabbrüche und vieles mehr bewältigen kann, und das alles dank der Magie von UDP-Verbindungen und dem von Mosh verwendeten Synchronisationsprotokoll.
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 verbindungslosen UPD-Datenverkehr zu Ihrem entfernten Host öffnen. Um sich zu verbinden, verwenden Sie einfach mosh user@server.
Mosh arbeitet auf der Ebene von Bildschirmen und Tastatureingaben, was ihm eine Reihe von Vorteilen gegenüber dem Standard-SSH-Mechanismus bietet, der einen binären Datenstrom zwischen Client und Server überträgt. Wenn wir nur Bildschirme und Tastatureingaben synchronisieren müssen, wird das Wiederherstellen einer unterbrochenen Verbindung viel einfacher. Während SSH alles, was passiert ist, puffert und sendet, muss Mosh nur die Tastatureingaben puffern und den letzten Frame des Terminalfensters mit dem Client synchronisieren.
2. Tmux verwenden
Wenn Sie „kommen und gehen möchten, wann immer Sie wollen“ und eine Terminal-Sitzung auf einem entfernten Knoten aufrechterhalten möchten, nutzen Sie einen tmux. Ich liebe tmux und benutze es ständig. Wenn Ihre SSH-Verbindung unterbrochen wurde, können Sie sich einfach wieder verbinden und tmux attacheingeben, um zu Ihrer tmux-Sitzung zurückzukehren. Außerdem bietet es wunderbare Funktionen wie terminalinterne Tabs und Panes, die den Tabs im iOS-Terminal ähneln, sowie die Möglichkeit, Terminals mit anderen zu teilen.
Einige lieben es, ihr tmux mit Byobu zu verschönern, einem Paket, das die Benutzerfreundlichkeit von tmux erheblich verbessert und viele Tastenkombinationen hinzufügt. Byobu wird mit Ubuntu geliefert und lässt sich leicht auf dem Mac über Homebrew installieren.
Teilen einer entfernten Terminal-Sitzung mit einem Freund
Manchmal kann beim Debuggen komplexer Probleme auf Ihren Servern der Wunsch entstehen, eine SSH-Sitzung mit jemandem zu teilen, der nicht im selben Raum ist. tmux eignet sich perfekt für diese Aufgabe! Es sind nur ein paar Schritte nötig:
- Stellen Sie sicher, dass tmux auf Ihrem Bastion-Host oder auf einem anderen Server, mit dem Sie arbeiten möchten, installiert ist.
- Sie müssen sich beide per SSH mit dem Gerät verbinden, indem Sie ein und dasselbe Konto verwenden.
- Einer von Ihnen sollte tmux starten, um eine tmux-Sitzung zu beginnen.
- Der andere sollte tmux attach ausführen.
- Voilà! Sie haben ein gemeinsames Terminal.
Wenn Sie an ausgefeilteren Multisitzungs-tmux-Sitzungen interessiert sind, probieren Sie tmate aus, einen Fork von tmux, der die gemeinsamen Terminalsitzungen erheblich vereinfacht.
Quelle: habr.com
