Neulich hatte ich so einen Fall. Auf meinem Root Server gab es Probleme mit der Datenbank und ich brauchte Hilfe. Wenn ich auf dem Server arbeite, mache ich das auf der Kommandozeile. Es gibt keine graphische Benutzeroberfläche. Ich öffne ein Terminalfenster, verbinde mich mit dem Server und kann dann Kommandos eingeben.
Ich fand jemanden, der bereit war, mir remote zu helfen. Das hat mich gefreut!
Dann stellte sich aber die Frage, wie wir das jetzt ganz konkret machen. Das root Passwort für den Server sollte man als Administrator niemals herausgeben und wenn, dann wirklich nur an Personen, denen man zu „110%“ vertraut.
Die Zauberwort für die Lösung dieses Problems heisst Terminal Multiplexing. Man kann dabei, wie bei grafischen Benutzeroberflächen, viele Fenster öffnen und auch gemeinsam und remote auf ein Terminalfenster zugreifen. Auf diese Weise haben wir uns gemeinsam durch das Problem gehangelt und auch eine Lösung gefunden.
Als Terminal Multiplexer haben wir das Programm tmux genutzt. Ich beschreibe im weiteren Verlauf, wie das funktioniert und wie es eingerichtet wird.
Ich habe auf meinem Server als Linux Distribution Ubuntu. Dort ist das Programmpaket tmux bereits installiert. Sollte es noch nicht installiert sein, einfach diesen Befehl eingeben:
sudo apt-get install tmux
Eine erste Session
Um tmux auszuprobieren, verbinde dich einfach mit deinem Server und rufe tmux auf:
tmux
Als Ergebnis siehst du auf deinem Terminal eine Statuszeile am unteren Bildrand. Sie ist ein wichtiger Bestandteil von tmux. Neben den aktuell geöffneten Fenstern (auf der linken Seite) zeigt sie auch Systeminformationen wie Datum und Uhrzeit (auf der rechten Seite) an. Die Statusleiste kann auch angepasst werden, beispielsweise um den Batteriestatus anzuzeigen.
Bitte jetzt nicht erschrecken, aber ich mache einen kleinen Rundflug durch tmux
damit du besser verstehst wie das Tool funktioniert.
Das Fenster teilen
Ich teile einfach den Bildschirm mit dem Kommando crtl-b %
. Die Tastenkombination ctrl-b
sorgt dafür, das tmux sich angesprochen fühlt. Das Zeichen danach ist dann der eigentliche Befehl.
Am Anfang ist es ein wenig schwer die Tasten zu treffen, daher hier nochmal ausführlich:
Du drückst die ctrl
-Taste und die b
-Taste gemeinsam. Dann lässt du beide Tasten gleichzeitig wieder los und drückst danach die %
-Taste.
Das Ergebnis sollte so aussehen wie im nächsten Screenshot:
Du hast jetzt zwei Fenster in einem oder eher ein geteiltes Fenster.
Der Bildschirm wurde vertikal geteilt. Der Cursor ist im rechten Pane.
Das was da entsteht heisst Pane. Die Struktur, die die Panes umgibt heisst Fenster, bzw. Window oder Session.
Mit dem Befehl exit
(auf die Zeile schreiben und Enter-Taste drücken) oder der Tastenkombination ctrl-d
kannst du das Pane wieder schliessen. Mit ctrl-b
und den <Pfeiltasten> links
oder rechts
(bzw. nach oben
oder nach unten
) kannst du zwischen den Panes hin und her springen.
Vertikal lässt sich das Fenster mit ctrl-b
"
in weitere Panes teilen.
Neue Fenster erzeugen
Was wir eben innerhalb eines Fensters gemacht haben, könnte man auch als Desktop bezeichnen. Wir haben mehrere Panes in einem Window oder eben mehrere Fenster in einem Desktop erzeugt. Das mit den Bezeichnungen ist etwas verwirrend, es ist natürlich völlig egal wie man das nennt. Das Prinzip gibt es auch bei Apple macOS und Microsoft Windows. Dort hat ein Desktop mehrere Fenster und man kann zwischen verschiedenen Desktops wechseln.
Wichtig zu merken und zu verstehen ist eigentlich nur, dass man in einem „Terminalfenster“ mehrere durch Panels geteilte Fenster haben kann.
Ja und nun erstellen wir mal ein zusätzliches Fenster mit dem Befehl ctrl-b c
.
Mit ctrl-b p
(für previous) kannst du in das vorherige Fenster wechseln, mit ctrl-b n
(für next) in das nächste Fenster.
Mit ctrl-b d
(für detach) kannst du das Fenster „abtrennen“.
Zum „beenden/detachen“ gibt es auch die Tastenkombination ctrl-b D
(grosses D). Hier wird eine Übersicht über alle Fenster (Sessions) angezeigt. Bei der Auswahl mit den <Pfeiltasten> nach oben
und nach unten
wird der jeweilige Fensterinhalt angezeigt. Wenn das ausgewählte Fenster mit der Enter
Taste bestätigt wird, wird es geschlossen.
WICHTIG! Bei diesem Vorgang wird die Session nicht beendet, sondern nur das Fenster drumherum „detached“ also von tmux
getrennt, oder abgetrennt.
Mit der Esc
Taste kommt man aus diesem Dialog wieder raus ohne etwas abgetrennt zu haben 🙂
Die existierenden Fenster lassen sich mit dem Befehl
tmux ls
anzeigen. Das sieht dann so aus:
Im Screenshot sieht man, dass zwei Fenster, mit der Nummer 0 und 5 „attached“ und ein Fenster, die 4 „nicht attached“ oder „detached“ sind.
Fenster an- und abtrennen (attach and detach)
Man ahnt es vermutlich schon. Es gibt einen Befehl um Fenster an- und abzutrennen. Auch das ist am Anfang etwas verwirrend und man muss es ein paar mal ausprobieren. Ein Fenster kannst du mit dem Befehl
tmux attach -t 0
Die 0 steht für die entsprechende Nummer des Fensters. Wem eine Nummer für ein Fenster zu unübersichtlich ist, der kann dem Fenster auch einen Namen geben.
Der folgende Befehl legt ein Fenster mit dem Namen database
an
tmux new -s database
In der Übersicht (tmux ls
) sieht es dann so aus:
Remote Zugriff
Ja und jetzt kommt das für meinem Fall relevante Feature.
Die tmux
Fenster (Sessions) existieren auf dem Server, egal ob jemand damit per SSH verbunden ist oder nicht.
Wenn ich mich nun von „woanders“ einlogge, so kann ich immer auf die Fenster mit tmux ls
und tmux attach -t <fenstername>
zugreifen.
In meinem Fall wollten wir ja an der Datenbank arbeiten. Die Datenbank hat einen User mit dem Namen postgres
. Die Person, die mir hilft, benötigt einen Zugang zum User postgres
. Der Zugang geht ohne Passwort am einfachsten, wenn ich den öffentlichen Schlüssel dieser Person im .ssh
Verzeichnis in die autorized_key
Datei eintrage.
Und jetzt … tada …
Wir melden uns beide beim Server an, „attachen“ beide das richtige Fenster mit tmux
und können gleichzeitig schreiben. Meistens schreibt nur eine Person, aber die andere Person kann natürlich live zuschauen was passiert.
Wenn man nun dazu noch telefonisch oder durch einen anderen Audio Kanal verbunden ist, kann man sich darüber unterhalten, was getan wird.
Die Vorgehensweise ist sehr praktisch und effektiv, weil die eine Person, nennen wir sie Angelika, root
-Rechte hat, die andere Person, nennen wir sie Egon, aber nicht. Wenn Egon nun root
-Rechte für einen Befehl benötigt, kann Angelika entscheiden ob das o.k. ist und diesen Befehl dann ausführen.
Fazit
Das Tool tmux
ist eine Möglichkeit mit mehreren Fenstern, Panes und Sessions zu arbeiten, und auch ein sehr leistungsfähiges Tool um gemeinsam remote in einem Terminalfenster zu arbeiten.
Links
- https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/
- https://wiki.ubuntuusers.de/tmux/
- https://en.wikipedia.org/wiki/Tmux
- https://tmuxcheatsheet.com
tl;dr: Mit tmux
kann man sehr schön gemeinsam in einem Terminal Fenster arbeiten
Schreibe einen Kommentar