Was sind andere Möglichkeiten, um eine tmux-Sitzung zwischen zwei Benutzern zu teilen?

106

Ich suche nach einer sauberen und einfachen Möglichkeit, eine tmux-Sitzung mit einem anderen Benutzer auf demselben Computer zu teilen. Ich habe die -S socket-pathOption ausprobiert , muss jedoch alle Berechtigungen des Socket-Pfads öffnen, bevor eine andere Person eine Verbindung zur Sitzung herstellen kann. Es funktioniert, ist aber etwas umständlich. Zum Beispiel:

# Me
$ tmux -S /tmp/pair
$ chmod 777 /tmp/pair

# Another user
$ tmux -S /tmp/pair attach

Dies funktioniert, aber beide Benutzer verwenden jetzt dieselbe tmux-Konfiguration (die Konfiguration des Benutzers, der die Sitzung initiiert hat). Gibt es eine Möglichkeit, den beiden Benutzern zu erlauben, ihre eigene tmux-Konfiguration und ihre eigenen individuellen tmux-Tastenzuordnungen zu verwenden?

Für Bonuspunkte wäre es im Idealfall auch nett, anderen Benutzern schreibgeschützten Zugriff auf die tmux-Sitzung zu gewähren.

Ryan McGeary
quelle
10
Ich bin zu faul, ich benutze einfach deine Frage als meine Antwort: D
phunehehe

Antworten:

46

Von https://github.com/zolrath/wemux :

wemux erweitert tmux, um das Multiplexen von Mehrbenutzerterminals einfacher und leistungsfähiger zu machen. Es ermöglicht Benutzern, einen Wemux-Server zu hosten und Clients beizutreten, entweder:

Im Spiegelmodus können Clients (ein anderer SSH-Benutzer auf Ihrem Computer) schreibgeschützt auf die Sitzung zugreifen, sodass sie sehen können, wie Sie arbeiten, oder

Der Pair-Modus ermöglicht es dem Client und Ihnen, im selben Terminal zu arbeiten (gemeinsamer Cursor).

Der Rogue-Modus ermöglicht es dem Client, in derselben tmux-Sitzung in einem anderen Fenster (separate Cursor) unabhängig voneinander zu koppeln oder zu arbeiten.

Es bietet Unterstützung für mehrere Server sowie eine Benutzerliste und Benachrichtigungen, wenn Benutzer eine Verbindung herstellen oder trennen.

Es ist ein Shellscript-Wrapper über tmux - kein Kompilieren notwendig.

Peter
quelle
16

Ich habe dies unter Ubuntu ausprobiert, verstehe aber nicht, warum es unter anderen Unix-Varianten nicht funktioniert.

Wenn beide Benutzer Mitglieder einer gemeinsamen Gruppe sind und der Socket-Pfad diese Gruppe verwendet, können beide Benutzer problemlos eine Verbindung herstellen.

Anstatt die Berechtigungen des Socket-Pfads jedes Mal ändern zu müssen, wenn Sie einen erstellen, können Sie ein bestimmtes Verzeichnis für Sockets erstellen (ich habe / var / tmux verwendet).

Fügen Sie zunächst eine Gruppe für tmux-Benutzer hinzu

$ addgroup $TMUX_GROUP

Erstellen Sie ein Verzeichnis mit der Gruppe $ TMUX_GROUP und verwenden Sie das Bit setgid, damit für Dateien, die im Verzeichnis erstellt werden, die Gruppe automatisch $ TMUX_GROUP festgelegt wird.

$ mkdir /var/tmux
$ chgrp $TMUX_GROUP /var/tmux
$ chmod g+ws /var/tmux

Stellen Sie als Nächstes sicher, dass die Benutzer, die die Sitzung freigeben möchten, Mitglieder von $ TMUX_GROUP sind

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Stephen Paulger
quelle
2
Wenn Sie ein Dateisystem haben, das ACLs unterstützt , müssen Sie keine Gruppe verwenden (und insbesondere benötigen Sie keine Root-Intervention). Aber das löst nicht das Problem der Freigabe der tmux- Konfiguration , oder?
Gilles
3
So erstellen shared sesion: tmux -S $TMUX_GROUP/shared-session. So hängen Sie es von einem anderen Konto an:tmux -S $TMUX_GROUP/shared-session attach
jfs
Der Kommentar oben (von @JFSebastian) sollte Teil der Antwort sein. Das vorgeschlagene Setup ist in Ordnung, aber die Antwort fällt kurz aus, wenn erklärt wird, wie man es wirklich benutzt. Und für alle Antworten auf dieser Seite ist diese Antwort diejenige, die das Problem besser angeht.
Dr. Beco
12

Soweit ich weiß, ist es nicht möglich, Sitzungen "sauber" mit anderen Benutzern zu teilen.

Auch ein schreibgeschützter Zugriff ist nicht möglich, wenn der Client den -rSwitch nicht verwendet .

Da ein anderer Terminal-Multiplexer- Bildschirm die Funktionen unterstützt, die Sie suchen, leider auch auf umständliche Weise ... Ich bin mir nicht sicher, ob dies eine Option für Sie ist, aber vielleicht wird dies jemand anderes nützlich finden.

Lösung für Bildschirm :

Eine Sitzung abhalten:

  • SUID-Bit des Bildschirms muss gesetzt sein: - /
  • Öffnen Sie die Sitzung mit screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

An einer Sitzung teilnehmen:

  • screen -x username/sessionname

Mit :aclchgoder können Sie Berechtigungsbits für den Benutzer (* für alle) setzen :chacl. # angehängt wirkt sich auf Windows aus,? Das Anhängen wirkt sich auf die Befehle aus.

Beispiele:

  • :aclchg * -wx "#,?" Legt fest, dass die Sitzungsberechtigungen für alle Benutzer schreibgeschützt sind
  • :aclchg foo +w 2 Erteilt dem Benutzer foo Schreibzugriff auf Fenster 2
  • :aclchg bar +x detach Erteilt die Berechtigung zum Trennen einer Sitzung von der Benutzerleiste
Echox
quelle
Für das, was es wert ist, denke ich, dass die tmux-Lösung (obwohl etwas ausführlicher) tatsächlich "sauberer" ist, da setuid-Binärdateien nicht im Dateisystem schweben.
Glyphe
Leider hat tmux damit ein Sicherheitsproblem: Diejenigen, denen Sie Zugriff gewähren, können auf einfache Weise neue Sitzungen erstellen und Dinge tun, die Sie nicht sehen.
Curt J. Sampson
9

Dies ist nicht exklusiv für tmux, aber im Moment verwende ich Folgendes:

Mit können Sie script -f /path/to/some/fileeine Terminalsitzung in eine Datei schreiben. Die -fOption aktualisiert die Datei während der Eingabe.

Jemand anderes (mit nur Berechtigungen für die Datei zu lesen, wenn Sie möchten) können Sie tail -fdie Datei, Ihre Terminalsitzung zu sehen. Die -fOption macht die tailAusgabe, was auch immer angehängt wird.

Die Kombination der beiden "synchronisiert" die Ansicht eines Terminals. Bei Verwendung mit tmux hat dies auch den Vorteil, dass die Größenänderung vermieden wird, die auftritt, wenn beide Benutzer unterschiedliche Auflösungen haben. Ein weiteres Merkmal ist, dass jeder Benutzer an einem anderen privaten Fenster oder einer anderen Sitzung arbeiten kann.

Eine mögliche Unannehmlichkeit besteht darin, dass einige Befehle (z. B. ncurses-basierte) seltsame Dinge an der Ausgabe vornehmen und auch Sequenzen (Farben) maskieren können. Ich verwende dies jedoch in tmux, und es scheint, dass tmux diese Probleme behebt. Ich kann sehen, wie der andere Benutzer Manpages liest und andere Befehle verwendet, die Puffer erstellen, Farben richtig angezeigt werden usw.

Dies erlaubt jedoch nicht, in das Terminal des anderen zu schreiben (möglicherweise könnte eine andere Lösung dafür hinzugefügt werden).

Ich habe gerne ein Fenster mit zwei Fenstern: ein Fenster, das script -ffür meine Kollegen sichtbar ist, und ein anderes daneben, wo ich tail -fdas Terminal habe.

Es funktioniert auch in ttys (und Sockets oder Named Pipes können auch für die Datei verwendet werden)

ferhtgoldaraz
quelle
Ich mag deine Antwort! Dies ist sowohl einfach als auch funktional!
JL