TeamViewer für das CLI: Terminal-Sessions freigeben


Ein Kunde wollte mir kürzlich bei meiner Arbeit über die Schulter schauen, um einen Serverfehler und dessen Behebung live nachvollziehen zu können. Mein erster Gedanke ging in Richtung TeamViewer und Co. Ich könnte doch meinen Desktop einfach für ihn freigeben - oder gibt es eine bessere Alternative? Bei meiner Recherche habe ich ein paar Wege gefunden, meine Kommandozeile ohne TeamViewer freizugeben.

Freigabe mit Screen

GNU Screen dürfte vielen Linux-Administratoren bekannt sein. Es wird häufig genutzt, um länger andauernde Prozesse im Terminal außerhalb einer laufenden SSH-Sitzung weiter laufen zu lassen. Gewollte oder ungewollte Verbindungsabbrüche beenden die Ausführung eines CLI-Tools im Vordergrund nicht, denn die Sitzung ist vom SSH-Login entkoppelt. Der Benutzer kann sich jederzeit wieder zu seiner virtuellen Konsolensitzung verbinden oder sich von ihr trennen.

Aber auch zum Teilen von Sitzungen eignet sich Screen. Ich gehe davon aus, dass beide Teilnehmer sich mit demselben Benutzer via SSH zum Server verbinden. Nun soll eine Screen-Terminalsitzung erstellt und mit dem zweiten Teilnehmer geteilt werden:

  1. User 1 erstellt eine neue Screen-Sitzung:

    screen -S sharedsession
    
  2. User 2 verbindet sich zu dieser Sitzung:

    screen -x sharedsession
    

Beide Benutzer können sich via CTRL-A + D jederzeit wieder von der Session loslösen. Ein “exit” beendet die Sitzung auf beiden Seiten. Wird die SSH-Verbindung zum Server über verschiedene Benutzer hergestellt, müssen weitere Einstellunen gesetzt werden. Das Vorgehen ist am Ende dieser Seite erklärt: http://wiki.networksecuritytoolkit.org/index.php/HowTo_Share_A_Terminal_Session_Using_Screen

Leider unterstützt Screen keinen Readonly-Modus - Beide Teilnehmer sind gleichberechtigt und können Kommandos ausführen.

Freigabe mit Tmux

Auch mit Tmux ist eine Freigabe schnell eingerichtet:

  1. User 1 erstellt eine tmux-Sitzung:

    tmux new-session -s sharedsession
    
  2. User 2 schaltet sich auf:

    tmux attach-session -t sharedsession
    

Wieder sind beide Benutzer gleichberechtigt. Benutzer 2 kann sich allerdings auch im “Read only”-Modus zur Sitzung verbinden. Er kann dann keine Eingaben vornehmen:

tmux attach-session -r -t sharedsession

Via CTRL-B + D kann sich jeder der Teilnehmer von der Sitzung loslösen. Ein “exit” beendet die Sitzung.

Freigabe via SSH und Webinterface mit Tmate

Der meiner Meinung nach schönste Weg zur Freigabe führt über das Tool “tmate”. Es ist eine Ableitung von tmux und erlaubt u.A. die Freigabe über eine HTML5-Webseite: Der Eingeladene bekommt einen Link, über den er entweder aktiv an der Sitzung teilnehmen kann oder nur passiv zusehen kann. Neben der Website kann auch via SSH zugegriffen werden. Nachteil: tmate ist nicht in allen Standardrepositories der gängigen Linuxdistributionen enthalten. Notfalls ist das Tool aber auch schnell selbst kompiliert. Die notwendigen Schritte sind auf der tmate-Website dokumentiert: https://tmate.io/

Tmate Screenshot

  1. User 1 erstellt eine tmate-Sitzung (entweder lokal oder auf dem Server):

    tmate
    
  2. User 1 lässt sich die Links zur Sitzung ausgeben und gibt den gewünschten Link weiter

    tmate show-messages
    
  3. User 2 öffnet den Link zur Website oder verbindet sich via SSH.

“Read only”-Modus, Normaler modus, HTML5-Website und SSH-Zugriff sind beliebig kombinierbar. So sollte für jeden Anwendungszweck etwas dabei sein.