Terminalserver für Admin; Keine einzige SSH-Lücke



Wenn für Ihre Arbeit viele SSH-Sitzungen auf verschiedenen Servern gespeichert werden müssen, wissen Sie wahrscheinlich, wie diese beim Wechsel zu einem anderen WLAN oder bei vorübergehendem Internetverlust leicht unterbrochen werden können. Aber was ist, wenn ich Ihnen sage, dass all diese Probleme längst gelöst sind und Sie unterbrochene Sitzungen und ständige Wiederverbindungen vergessen können?

Wenn ich den Deckel des Laptops öffne, sind alle meine Dutzende von SSH-Sitzungen sofort verfügbar und befinden sich in dem Zustand, in dem ich sie verlassen habe. Dieser Artikel beschreibt, wie Sie einen Terminalserver für einen Systemadministrator konfigurieren. Wenn Sie einen solchen Server verwenden, können Sie unterbrochene SSH-Sitzungen vergessen, ständig neue Verbindungen herstellen und Kennwörter eingeben.



Server-Setup


Die Idee ist einfach und im Bild im Post-Titel klar dargestellt: Wir werden alle SSH-Verbindungen auf einem speziellen Terminalserver speichern. Dieser Server ist unser Einstiegspunkt für die Verwaltung anderer Server. Gleichzeitig müssen die Endserver keine zusätzliche Software konfigurieren oder installieren.
Fast jede Konfiguration ist für einen Terminalserver geeignet. Es ist jedoch besser, mehr RAM zu haben, um das Konsolenprotokoll in jeder Sitzung zu speichern und jederzeit im Verlauf nach oben scrollen zu können, um zu sehen, was Sie vor einem Monat auf dem Sitzungsserver getan haben. Normalerweise reichen 1-2 GB Speicher aus.

Auswahl der Verteilung


Auf dem Terminalserver ist die Verfügbarkeit am wichtigsten, denn je seltener wir neu starten, desto mehr werden unsere SSH-Sitzungen ausgeführt. Daher wählen wir die konservativste LTS-Distribution (Long Term Support), zum Beispiel einen stabilen Debian- oder Ubuntu-Zweig. Wir konfigurieren automatische Updates (unbeaufsichtigte Upgrades), so dass ein plötzlicher Neustart von Programmen keine Überraschung ist.

SSH-Server-Setup


Da der Terminalserver den Zugriff auf alle unsere Server gleichzeitig öffnet, ist es sicher, ihn zu sichern. Zu diesem Zweck verbieten wir die Authentifizierung mit Kennwörtern und lassen nur den Zugriff mit Schlüsseln. Außerdem verbieten wir die Anmeldung als Root.
Zuerst müssen Sie einen neuen Benutzer im System erstellen.

/ etc / ssh / sshd_config
..... #    root PermitRootLogin no #   ,   ChallengeResponseAuthentication no #   ,   PAM   UsePAM no .... 

Eine solche Konfiguration reicht völlig aus, um vor einer Massenaufzählung von Kennwörtern zu schützen, da der SSH-Server die Verbindung einfach schließt, wenn er versucht, sich mit einem Kennwort anzumelden. Selbst bei einer großen Anzahl von Verbindungen werden sie schnell genug geschlossen, ohne den Server erheblich zu belasten. Meiner Meinung nach müssen bei dieser Konfiguration keine zusätzlichen Sicherheitsfunktionen wie fail2ban installiert werden.

Anfängliche Administratoren in ihren Handbüchern empfehlen häufig, den SSH-Port zu ändern und einen nicht standardmäßigen Port wie 2222 anstelle von 22 zu installieren. Meiner Meinung nach ist dies eine schlechte Praxis, die keine Sicherheit bietet.

  • Auf diese Weise können Sie sich nicht vor dem Knacken von Passwörtern schützen, da automatische Scanner immer noch SSH an jedem Port finden und anfangen zu hämmern.
  • Dies führt zu einem Durcheinander, wenn mehrere Personen das System verwalten und jeder seine eigenen Ports erfindet. Wenn es Dutzende solcher Systeme gibt, müssen Sie nach dem Scanner suchen, an dem der SSH dieses Mal versteckt ist.
  • Dadurch werden die in Programmen integrierten Sicherheitsbeschränkungen aufgehoben. Beispielsweise stellen Webbrowser keine Verbindung zu Port 22 her, wenn Sie dies explizit in HTTP angeben, sondern stellen gleichzeitig eine Verbindung zu einem anderen nicht standardmäßigen Port her. Dies kann verwendet werden, um IDS / IPS-DDoS-Systeme auszulösen.



Tmux - ein Fenster, um alle zu regieren


Tmux ist ein unglaublich praktisches Programm zur Verwaltung virtueller Terminals, ohne das ich mir meine Arbeit einfach nicht vorstellen kann. Zunächst erscheint es verwirrend und kompliziert, aber wenn Sie sich selbst überwältigen und lernen, wie man es benutzt, können Sie es nicht länger ablehnen.

Für diejenigen, die nicht wissen, was tmux ist, stellen Sie sich einen Webbrowser mit Registerkarten vor, aber anstelle von Websites gibt es Konsolensitzungen. Sie können unendlich viele Registerkarten öffnen und in jeder Registerkarte Ihr Programm ausführen. Gleichzeitig wird es auf dem Server ausgeführt, und Sie können jederzeit die Verbindung trennen, während alle ausgeführten Registerkarten und Programme an ihrem Platz bleiben und Sie zu ihnen zurückkehren können.

Installieren Sie tmux, falls es noch nicht installiert ist:
 apt install tmux 

In der tmux-Terminologie wird ein separater Satz von Fenstern als Sitzung bezeichnet. Standardmäßig wird nur eine Sitzung verwendet, daher werden überhaupt keine Sitzungsnamen verwendet. Es ist jedoch wichtig zu wissen, dass es bei Bedarf mehrere geben kann.

Erstellen Sie eine neue Sitzung:
 tmux new 

In diesem Moment haben wir eine neue Sitzung mit einem Fenster erstellt und sofort eine Verbindung hergestellt. Sie können die grüne Statusleiste sehen, die unten angezeigt wird. Dies ist so etwas wie eine Registerkartenleiste in einem Browser. Es werden die aktuelle Registerkarte und die benachbarten sowie Servicemeldungen angezeigt.

In der tmux-Statusleiste werden die Namen der Fenster (Registerkarten) angezeigt
Selbst wenn wir die SSH-Verbindung schließen und erneut eine Verbindung zum Server herstellen, bleibt unsere laufende tmux-Sitzung zu diesem Zeitpunkt zusammen mit allen laufenden Programmen im selben Zustand, als ob wir sie minimiert hätten. Versuchen wir, das Top- Programm innerhalb der tmux-Sitzung auszuführen und die Verbindung zu trennen. Schließen Sie aus Gründen der Übersichtlichkeit das Terminalfenster vollständig und stellen Sie die Verbindung zum Server wieder her.

Nach dem erneuten Herstellen der Verbindung zum Server stellen wir eine Verbindung zu unserer zuvor gestarteten Sitzung her:
 tmux attach 

Und stellen Sie sicher, dass das am häufigsten ausgeführte Programm weiterhin funktioniert. An dieser Stelle ist es wichtig, das Hauptprinzip zu verstehen: Nach dem Starten der tmux-Sitzung bleibt es im Hintergrund auf dem Server, unabhängig davon, ob Sie mit ihm verbunden sind oder nicht.

Da die tmux-Sitzung mehrere gleichzeitige Verbindungen zulässt, kann dies für die Zusammenarbeit mehrerer Personen auf dem Server verwendet werden, um dieselbe Konsole in Echtzeit zu sehen. Dazu stellt jeder unter demselben Konto eine Verbindung zu demselben Server her und gibt tmux attach ein. Dort können Sie direkt in der Befehlszeile chatten. Wir verwenden dies häufig, um das Konsolenprotokoll im Messenger nicht miteinander zu verknüpfen, sondern sofort an einem Terminal zu arbeiten.


Tmux kann ein Fenster in mehrere Fenster unterteilen (jedes Fenster innerhalb einer Registerkarte wird als Bereich bezeichnet). Dies ist praktisch, wenn zwei Konsolen gleichzeitig angezeigt werden müssen. Bearbeiten Sie beispielsweise in einem Fenster das Skript und in einem anderen das Protokoll.

Mit tmux können Sie mehrere Fenster in einem erstellen und deren Größe ändern

Standardmäßig wird Strg + b zur Steuerung von tmux verwendet. Nach dem Drücken dieses Steuer-Hotkeys erwartet tmux, dass der Hauptbefehl aus einem einzelnen Buchstaben eingegeben wird.

Hier sind die grundlegenden Befehle:
Strg + b + c - (erstellen) Neues Fenster erstellen (Registerkarte)
Strg + b + <Ziffer> - Wechseln Sie zur Tabulatornummer N, wobei die Ziffer eine Taste von 0 bis 9 ist. Die Fensternummerierung beginnt bei Null.
Strg + b + x - Schließen Sie das aktuelle Fenster. Wenn das letzte Fenster geschlossen wird, wird die tmux-Sitzung beendet.
Strg + b + w - Zeigt eine Liste aller Fenster an, die Sie mit den Cursortasten nach oben und unten bewegen können, und wählen Sie das gewünschte Fenster aus, indem Sie die Eingabetaste drücken.
Strg + b + " - Teilen Sie das Fenster horizontal in zwei Hälften und erstellen Sie ein neues
Strg + b +% - Teilt das Fenster vertikal und erstellt ein neues
Strg + b +, - benennt das aktuelle Fenster um
Strg + b + runter / rauf / links / rechts - gehe durch das Fenster im Fenster
Strg + b + Seite hoch / Seite runter - nach oben scrollen
Strg + b + / - Suche nach Verlauf, wie in vim oder weniger

Dies sind alle Hotkeys, die ich über 10 Jahre lang für die Verwendung von tmux benötigt habe. Tatsächlich gibt es noch viel mehr, aber für den Anfang ist es besser, sich mit diesen zu befassen.

Tmux konfigurieren


Ich finde den Strg + b- Hotkey unangenehm, da es zu viel kostet, drei Tasten für eine Aktion zu drücken. Das Thema von tmux configs ist ein separater Geschmacksbereich, und jeder erfahrene Benutzer hat seine eigene Vision, wie man es richtig und bequem verwendet. Es gibt sogar eine ganze Auswahl an Konfigurationen und Themen für tmux.

Als Ausgangspunkt werde ich ein Beispiel für meine Konfiguration geben, die meines Erachtens alle Schwierigkeiten behebt, die die schnelle Entwicklung von tmux verhindern. Die Konfiguration befindet sich im Home-Ordner mit dem Namen ~ / .tmux.conf

 #  ctrl+b    .   macbook        set-option -g prefix ` #     <`>  `+a bind-key a send-prefix #       set -g base-index 1 set-option -g base-index 1 setw -g pane-base-index 1 # Lowers the delay time between the prefix key and other keys - fixes pausing in vim set-option -sg escape-time 1 #     1000 .      set -g history-limit 1000 #    # default statusbar colors set-option -g status-fg white set-option -g status-bg default # default window title colors set-window-option -g window-status-fg default set-window-option -g window-status-bg default #        #------------------ # Respawn windows when PANE IS DEAD bind-key R respawn-window #   default   local new -d -s default -n local #     irc   irssi neww -d -n irc irssi #     superserver   ssh root@superserver.com neww -d -n superserver ssh root@superserver.com #     anotherserver   ssh root@123.123.123.123 neww -d -n superserver anotherserver root@123.123.123.123 


Mit dieser Konfiguration können Sie beim Start automatisch mehrere Fenster erstellen, in denen SSH-Sitzungen sofort gestartet werden. In diesem Fall ist es nicht erforderlich, manuell eine neue Sitzung mit dem Befehl tmux new zu erstellen. Es reicht aus, immer tmux attach einzugeben . Wenn die Sitzung zuvor nicht vorhanden war, wird sie erstellt.

Autostart tmux


Wir möchten, dass wir beim Herstellen einer Verbindung zu einem Terminalserver sofort zu tmux gelangen, selbst wenn der Server neu gestartet und die tmux-Sitzung geschlossen wurde.

Fügen Sie dazu tmux am Ende der Datei ~ / .bashrc hinzu . Es ist wichtig zu bedenken, dass ein solches Design nur mit der obigen Konfiguration funktioniert.
 if [ ! "$TMUX" ]; then tmux attach fi if [ "$TMUX" ]; then export TERM=screen fi 


Diese einfache Bedingung bedeutet, dass wir mit tmux verbunden sind, wenn wir nicht in tmux sind.

Damit ist die tmux-Konfiguration auf dem Terminalserver abgeschlossen. Von nun an erstellen wir für jede neue SSH-Verbindung ein separates Fenster in tmux. Und selbst wenn die Verbindung zum Terminalserver unterbrochen wird, bleiben alle SSH-Verbindungen aktiv.

Mosh - keine Pausen mehr


Jetzt müssen wir eine kontinuierliche Verbindung zum Terminalserver herstellen, der immer aktiv ist. Selbst wenn wir den Laptop mehrere Tage lang geschlossen und in einem anderen WLAN-Netzwerk geöffnet haben, sollte die Verbindung selbst wiederhergestellt werden.

Mosh ist ein Add-On über einen normalen OpenSSH-Server, mit dem Sie Unterbrechungen vergessen können. Mosh meldet sich mit normalem SSH an. Danach wird ein separater UDP-Kanal ausgelöst, der nach einer Unterbrechung sofort wiederhergestellt wird, selbst wenn Ihre externe IP-Adresse geändert wird.
Da wir eine konstante Verbindung zum Terminalserver aufrechterhalten müssen, installieren wir mosh nur auf dem Server und auf unserem Arbeitscomputer. Gleichzeitig müssen Sie nichts auf den Remote-Servern installieren, da die Verbindungen zu diesen bereits für immer in tmux bestehen.

Installieren Sie mosh auf dem Server:
 apt install mosh 


Installieren Sie mosh auf unserem funktionierenden Computer. Es ist für alle gängigen Betriebssysteme verfügbar, der native Client jedoch nur für Unix-ähnliche Betriebssysteme. Die Windows-Version wird mit Cygwin oder der Chrome-Anwendung implementiert.

Ich benutze macOS und installiere mosh über den Brew Package Manager:
 brew install mosh 


In den meisten Fällen erfordert mosh keine zusätzliche Konfiguration und funktioniert sofort. Es reicht aus, mosh anstelle des Befehls ssh zu schreiben:
 mosh user@my-server.com 


Bei nicht standardmäßigen Konfigurationen sieht der Befehl etwas komplizierter aus. Wenn Sie beispielsweise den Port- und Schlüsselpfad angeben müssen:

 mosh --ssh="ssh -p 2222 -i /path/to/ssh.key" user@my-server.com 


Mosh führt die primäre Authentifizierung als regulärer SSH-Client durch und autorisiert den Standardport 22. Gleichzeitig überwacht der Mosh-Server zunächst keine Ports, und abgesehen vom ursprünglichen OpenSSH-Dämon sind keine Ports auf dem Server geöffnet. Nach der Verbindung über TCP wird mosh auf dem Server im Benutzerbereich ausgeführt und öffnet einen zusätzlichen Tunnel über UDP.


Flussdiagramm des Mosh-Protokolls

Jetzt wird die auf dem Client ausgeführte Mosh-Sitzung immer wiederhergestellt, wenn das Internet angezeigt wird. Auf meinem Laptop habe ich monatelang eine Mosh-Sitzung geöffnet, ohne neu zu starten, und ich muss mich nicht ständig erneut beim Terminalserver anmelden, es funktioniert einfach immer.

Um nicht jedes Mal einen langen Verbindungsbefehl zum Terminalserver einzugeben, habe ich aus einem Buchstaben einen Alias ​​für den Verbindungsbefehl erstellt:

 alias t='mosh --ssh="ssh -p 443 -i /path/to/ssh.key" user@my-server.com' 


Fazit



Dieses einfache Schema ermöglicht es Ihnen, Zeit und Nerven erheblich zu sparen und das Ergebnis der Arbeit nicht zu verlieren, wenn SSH defekt ist. Ich muss ständig sehen, wie sich Anfänger jedes Mal bei ihren Servern anmelden und klebrige SSH-Sitzungen beenden.
Es mag auf den ersten Blick verwirrend erscheinen, aber ich versichere Ihnen, dass Sie, sobald Sie sich selbst überwältigt und sich daran gewöhnt haben, mit herablassendem Bedauern diejenigen betrachten werden, bei denen die SSH-Verbindungen noch unterbrochen sind.



Abonnieren Sie unseren Instagram-Entwickler


Source: https://habr.com/ru/post/de472746/


All Articles