Quels sont les autres moyens de partager une session tmux entre deux utilisateurs?

106

Je cherche un moyen simple et propre de partager une session tmux avec un autre utilisateur sur la même machine. J'ai essayé l' -S socket-pathoption, mais il faut ouvrir toutes les autorisations du chemin de la socket pour que quelqu'un d'autre puisse se connecter à la session. Cela fonctionne, mais c'est un peu lourd. Par exemple:

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

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

Cela fonctionne, mais les deux utilisateurs partagent maintenant la même configuration tmux (la configuration de l'utilisateur qui a lancé la session). Existe-t-il un moyen d'autoriser les deux utilisateurs à utiliser leur propre configuration tmux et leurs propres liaisons de clé tmux individuelles?

Pour les points bonus, idéalement, il serait également intéressant de donner aux autres utilisateurs un accès en lecture seule à la session tmux.

Ryan McGeary
la source
10
Je suis trop paresseux. J'utilise simplement votre question comme réponse: D
phunehehe,

Réponses:

46

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

wemux améliore tmux pour rendre le multiplexage de terminaux multi-utilisateurs plus facile et plus puissant. Il permet aux utilisateurs d’héberger un serveur wemux et d’y associer des clients:

Le mode miroir donne aux clients (un autre utilisateur SSH sur votre machine) un accès en lecture seule à la session, leur permettant de vous voir au travail, ou

Le mode Pair permet au client et à vous-même de travailler dans le même terminal (curseur partagé)

Le mode Rogue permet au client de s'associer ou de travailler indépendamment dans une autre fenêtre (curseurs séparés) dans la même session tmux.

Il offre une prise en charge multi-serveur ainsi qu'une liste des utilisateurs et des notifications lorsque les utilisateurs se connectent / se détachent.

C'est un wrapper shellscript sur tmux - aucune compilation nécessaire.

Peter
la source
16

J'ai déjà essayé ceci sur Ubuntu, mais je ne vois pas pourquoi cela ne fonctionnerait pas avec d'autres variantes d'Unix.

Si les deux utilisateurs sont membres d'un groupe commun et que le chemin de socket utilise ce groupe, les deux utilisateurs pourront se connecter correctement.

Plutôt que de devoir modifier les autorisations du chemin de socket à chaque fois que vous en créez un, vous pouvez créer un répertoire spécifique pour les sockets (j'ai utilisé / var / tmux).

Ajoutez d'abord un groupe pour les utilisateurs de tmux

$ addgroup $TMUX_GROUP

Créez un répertoire avec le groupe défini sur $ TMUX_GROUP et utilisez le bit setgid pour que les fichiers créés dans ce répertoire aient automatiquement le groupe défini sur $ TMUX_GROUP.

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

Assurez-vous ensuite que les utilisateurs qui souhaitent partager la session sont membres de $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Stephen Paulger
la source
2
Si votre système de fichiers prend en charge les listes de contrôle d'accès , vous n'avez pas besoin d'utiliser un groupe (et en particulier vous n'avez besoin d'aucune intervention de la racine). Mais cela ne résout pas le problème du partage de la configuration de tmux , n'est-ce pas?
Gilles
3
Pour créer sesion Partagée: tmux -S $TMUX_GROUP/shared-session. Pour le joindre depuis un autre compte:tmux -S $TMUX_GROUP/shared-session attach
jfs
Le commentaire ci-dessus (par @JFSebastian) devrait faire partie de la réponse. La configuration proposée est correcte, mais la réponse n’est pas satisfaisante pour expliquer comment l’utiliser réellement. Et pour toutes les réponses de cette page, cette réponse est celle qui répond le mieux au problème.
Dr Beco
12

Autant que je sache, il n'est pas possible de partager des sessions avec d'autres utilisateurs de manière "propre".

De plus, l'accès en lecture seule n'est pas possible si le client n'utilise pas le -rcommutateur.

Alors qu'un autre écran de multiplexeur de terminal prend en charge les fonctionnalités que vous recherchez, malheureusement aussi d'une manière lourde ... Je ne suis pas sûr que ce soit une option pour vous, mais peut-être que quelqu'un d'autre trouvera cela utile.

Solution pour l' écran :

Organiser une session:

  • Le bit d' écran SUID doit être défini: - /
  • Ouvrir la session avec screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Rejoindre une session:

  • screen -x username/sessionname

Vous pouvez définir des bits d'autorisation pour l'utilisateur (* pour tous) avec :aclchgou :chacl. # ajouté affectera les fenêtres,? ajouté affectera les commandes.

Exemples:

  • :aclchg * -wx "#,?" définira les autorisations de session en lecture seule pour tous les utilisateurs
  • :aclchg foo +w 2 donnera un accès en écriture à l'utilisateur foo sur la fenêtre 2
  • :aclchg bar +x detach donnera la permission de détacher une session à la barre d'utilisateur
echox
la source
Pour ce que cela vaut, j’estime que la solution tmux (bien que légèrement plus détaillée) est en réalité "plus propre", puisqu’elle ne nécessite pas de laisser des fichiers binaires setuid flottants autour du système de fichiers.
Glyph
Malheureusement, tmux utilisé de cette manière pose un problème de sécurité: ceux à qui vous donnez l'accès peuvent facilement créer de nouvelles sessions et y faire des choses que vous ne voyez pas.
Curt J. Sampson
9

Ce n'est pas exclusif à tmux, mais pour l'instant c'est ce que j'utilise:

Vous pouvez utiliser script -f /path/to/some/filepour écrire une session de terminal dans un fichier. L' -foption met à jour le fichier pendant que vous tapez.

Quelqu'un d'autre (avec uniquement des autorisations de lecture sur le fichier, si vous le souhaitez) peut faire tail -fpour voir le fichier, votre session de terminal. L' -foption rend la tailsortie tout ce qui est ajouté.

La combinaison des deux "synchronise" la vue d'un terminal. Lorsqu'il est utilisé avec tmux, il présente également l'avantage d'éviter le redimensionnement qui se produit lorsque les deux utilisateurs ont des résolutions différentes. Une autre caractéristique est que chaque utilisateur peut travailler sur une autre fenêtre ou session privée.

Un inconvénient potentiel est que certaines commandes (basées sur ncurses, par exemple) peuvent faire des choses étranges en sortie, ainsi que des séquences d'échappement (couleurs). Cependant, j'utilise ceci dans tmux, et il semble que tmux corrige ces problèmes. Je peux voir l’autre utilisateur lire les pages de manuel et utiliser d’autres commandes pour créer des tampons, les couleurs sont affichées correctement, etc.

Cela ne permet cependant pas d’écrire sur le terminal de l’autre (une autre solution pourrait peut-être être ajoutée pour cela).

J'aime avoir une fenêtre avec deux volets: un volet qui est script -fvisible par le pair, un autre à côté, où tail -fil est en terminal.

Cela fonctionne également dans ttys (et les sockets ou les pipes nommés peuvent aussi être utilisés pour le fichier)

ferhtgoldaraz
la source
J'aime ta réponse! C'est à la fois simple et fonctionnel!
JL