Interessante Tricks und SSH-Tricks

Einige Tipps zur effizienten Verwendung von SSH. Sprechen wir darüber, wie:

  • Verwenden Sie die Zwei-Faktor-Authentifizierung für SSH-Verbindungen
  • Es ist sicher, "Schlüsselweiterleitung" (Agentenweiterleitung) zu verwenden.
  • Beenden Sie eine blockierte SSH-Sitzung.
  • Lassen Sie das Terminal beim Verlassen oder Trennen offen.
  • Teilen Sie das Remote-Terminal mit einem Freund (ohne Zoom!).

Bild

SSH-Multi-Faktor-Authentifizierung


Es gibt fünf Möglichkeiten, einen zweiten Faktor für die Authentifizierung in SSH hinzuzufügen:

  1. OpenSSH ( ).

    2020 OpenSSH FIDO U2F (Universal Second Factor). , .

    , 8.2 . ssh -V, nc [servername] 22.

    ecdsa-sk ed25519-sk ( ). $ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk. , U2F . U2F , .

    . OpenSSH -sk-«» . U2F . , . $ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_sk. , $ ssh-add -K. .
  2. PIV+PKCS11 Yubikey. , SSH-, . Yubikey U2F+SSH with PIV/PKCS11. , FIDO U2F. , .
  3. ssh- yubikey-agent. Filippo Valsorda SSH- Yubikeys. .
  4. Touch ID sekey. Sekey — SSH- , secure enclave MacOS Touch ID.
  5. Single Sign On SSH. . Single Sign On SSH , , .


(agent forwarding)


Durch das Weiterleiten eines Schlüssels in SSH erhält der Remote-Host Zugriff auf Ihren lokalen SSH-Agenten. Wenn Ihr SSH-Client die Schlüsselweiterleitung verwendet (normalerweise durch die Option aktiviert ssh -A), befinden sich zwei Kanäle in der Verbindung - Ihre interaktive Sitzung und der Schlüsselweiterleitungskanal. Der lokale SSH-Agent erstellt einen IPC-Socket, der über diesen Kanal eine Verbindung zum Remote-Host herstellt. Das ist gefährlich, weil Ein Benutzer mit Root-Rechten auf einem Remote-Host hat Zugriff auf Ihren lokalen SSH-Agenten und kann diesen möglicherweise verwenden, um in Ihrem Namen auf Netzwerkressourcen zuzugreifen. Mit dem Standard-SSH-Agenten, der mit OpenSSH geliefert wird, wissen Sie nie, was passiert ist. Wenn Sie jedoch einen U2F-Schlüssel (oder Sekey ) verwenden, können Sie alle Versuche zur Verwendung Ihres SSH-Agenten stoppen.

Trotz dieser Einschränkung ist die regelmäßige Verwendung der Schlüsselweiterleitung durchaus akzeptabel. Verwenden Sie diese Methode nicht für alle Ihre Verbindungen. Verwenden Sie es nur, wenn Sie sicher sind, dass es in bestimmten Situationen benötigt wird.

Beenden einer hängenden SSH-Sitzung


SSH-Sitzungen frieren häufig aufgrund von Netzwerkausfällen, Kontrollverlust durch ein ausführbares Programm oder einer der Terminalsteuerungssequenzen ein, die die Tastatureingabe blockieren.

Hier sind einige Möglichkeiten, um aus einer blockierten Sitzung herauszukommen:

  1. Automatisches Beenden, wenn das Netzwerk unterbrochen wird. In Ihrer SSH-Konfiguration müssen .ssh/configSie Folgendes hinzufügen: Die Verbindung wird überprüft, indem jede Sekunde Echoanforderungen an den Remote-Host gesendet werden . Wenn mehr als solche Anfragen unbeantwortet bleiben, schließt SSH die Verbindung.

    ServerAliveInterval 5
    ServerAliveCountMax 1


    sshServerAliveIntervalServerAliveCountMax
  2. . ssh ~ . ~. ( ).

    ~? , . , ~ , .

?Als das Internet erfunden wurde, waren Computer nicht besonders mobil. Wenn Sie an einem Laptop arbeiten und zwischen IPv4-WLAN-Netzwerken wechseln, ändert sich Ihre IP-Adresse. Da SSH auf einer TCP-Verbindung basiert und TCP-Verbindungen von Verbindungspunkten mit festen IP-Adressen abhängen, geht Ihre SSH-Verbindung jedes Mal verloren, wenn Sie eine Verbindung zu einem anderen Netzwerk herstellen. Wenn sich Ihre IP-Adresse ändert, dauert es einige Zeit, bis der Netzwerkstapel feststellt, dass die Verbindung unterbrochen wurde. Eine TCP-Verbindung bedeutet nicht, dass eine der Parteien bei Netzwerkproblemen schnell heruntergefahren wird. Daher wird versucht, das Senden der Daten für einige Zeit erneut zu versuchen. In Ihrem Terminal bleibt die Sitzung hängen. IPv6 fügt Funktionen hinzu, mit denen Geräte ihre IP-Adresse beim Wechseln zwischen Netzwerken beibehalten können.Eines Tages wird dies kein Problem mehr sein.

So lassen Sie ein Terminal auf einem Remote-Host offen


Es gibt zwei Möglichkeiten, eine Sitzung zu speichern, wenn Sie zwischen Netzwerken wechseln oder die Verbindung für eine Weile trennen möchten:

  1. Verwenden Sie Mosh oder Eternal Terminal . Wenn Sie wirklich eine Verbindung benötigen, die nicht abstürzt , auch wenn Sie zwischen Netzwerken wechseln, verwenden Sie die Mosh - Mobile Shell. Mosh ist eine sichere Shell, die SSH zum Initialisieren einer Sitzung (Handshake) verwendet und anschließend auf ihren eigenen verschlüsselten Kanal wechselt. Dieser Kanal ist sehr stabil. Es kann verschiedene Situationen bewältigen, einschließlich Unterbrechungen des Internets, Ändern der IP-Adresse Ihres Laptops, große Verzögerungen bei der Übertragung über das Netzwerk und andere. Dank der Magie von UDP und dem von Mosh verwendeten Synchronisationsprotokoll.

    Mosh , 60000–61000 UDP . mosh user@server .

    Mosh , SSH, - . , . SSH , , Mosh .
  2. tmux. , , tmux. SSH- , tmux attach, tmux. — , macOS .

    tmux Byobu — , . Byobu Ubuntu macOS Homebrew.



Wenn Sie ein komplexes Problem mit Servern lösen, möchte ich eine SSH-Sitzung mit einer anderen Person teilen, die sich an einem anderen Ort befindet. tmux ist das beste Tool zum Teilen von Terminals.
Sie müssen also Folgendes tun:

  1. Stellen Sie sicher, dass es tmuxauf Ihrem Server in DMZ installiert ist (oder wo Sie eine Verbindung herstellen möchten).
  2. Sie müssen beide über SSH mit demselben Konto eine Verbindung zum Server herstellen .
  3. Einer von Ihnen muss ausgeführt werden tmux, um eine tmuxSitzung zu erstellen .
  4. Ein anderer muss den Befehl ausführen tmux attach.
  5. Voila! Sie haben das Terminal freigegeben.

Wenn Sie mehr Feinabstimmung von Mehrbenutzersitzungen benötigen, verwenden Sie tmate, diesen Zweig, tmuxmit dem Sie gemeinsam genutzte Sitzungen noch einfacher gestalten können.

Übersetzt von Andrey Zinchenko, Leiter der Rexoft Analytics-Abteilung

All Articles