¿Cuáles son otras formas de compartir una sesión tmux entre dos usuarios?


106

Estoy buscando una manera limpia y fácil de compartir una sesión tmux con otro usuario en la misma máquina. He probado la -S socket-pathopción, pero requiere abrir todos los permisos de la ruta del socket antes de que alguien más pueda conectarse a la sesión. Funciona, pero es un poco engorroso. Por ejemplo:

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

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

Esto funciona, pero ambos usuarios ahora comparten la misma configuración de tmux (la configuración del usuario que inició la sesión). ¿Hay alguna manera de permitir que los dos usuarios usen su propia configuración tmux y sus propias asociaciones de teclas tmux individuales?

Para los puntos de bonificación, idealmente, también sería bueno dar acceso de solo lectura de la sesión tmux a otros usuarios.


10
Soy demasiado vago, solo uso su pregunta como respuesta: D
phunehehe

Respuestas:


46

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

wemux mejora tmux para hacer que la multiplexación de terminales multiusuario sea más fácil y más potente. Permite a los usuarios alojar un servidor wemux y hacer que los clientes se unan:

El modo espejo brinda a los clientes (otro usuario de SSH en su máquina) acceso de solo lectura a la sesión, lo que les permite verlo trabajar, o

El modo de emparejamiento permite que el cliente y usted trabajen en el mismo terminal (cursor compartido)

El modo Rogue le permite al cliente emparejarse o trabajar independientemente en otra ventana (cursores separados) en la misma sesión de tmux.

Cuenta con soporte para múltiples servidores, así como listas de usuarios y notificaciones cuando los usuarios se conectan / desconectan.

Es un contenedor shellscript sobre tmux, no es necesario compilarlo.


16

He intentado esto en Ubuntu pero no veo por qué no funcionaría en otras variantes de Unix.

Si ambos usuarios son miembros de un grupo común y la ruta del socket utiliza ese grupo, ambos usuarios podrán adjuntar bien.

En lugar de tener que cambiar los permisos de la ruta del socket cada vez que crea uno, puede crear un directorio específico para sockets (utilicé / var / tmux).

Primero agregue un grupo para usuarios de tmux

$ addgroup $TMUX_GROUP

Cree un directorio con el grupo establecido en $ TMUX_GROUP y use el bit setgid para que los archivos creados dentro del directorio tengan automáticamente el grupo establecido en $ TMUX_GROUP.

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

A continuación, asegúrese de que los usuarios que desean compartir la sesión sean miembros de $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2

2
Si tiene un sistema de archivos que admite ACL , no necesita usar un grupo (y en particular no necesita ninguna intervención de raíz). Pero esto no resuelve el problema de compartir el tmux configuración , ¿verdad?
Gilles

3
Para crear sesion compartida: tmux -S $TMUX_GROUP/shared-session. Para adjuntarlo desde otra cuenta:tmux -S $TMUX_GROUP/shared-session attach
jfs

El comentario anterior (por @JFSebastian) debería ser parte de la respuesta. La configuración propuesta está bien, pero la respuesta se queda corta cuando se explica cómo usarla realmente. Y para todas las respuestas en esta página, esta respuesta es la que mejor aborda el problema.
Dr Beco

12

Que yo sepa, no es posible compartir sesiones con otros usuarios de una manera "limpia".

Además, el acceso de solo lectura no es posible si el cliente no usa el -rconmutador.

Como otra pantalla de multiplexor de terminal admite las funciones que está buscando, lamentablemente también de una manera engorrosa ... No estoy seguro de si esta es una opción para usted, pero tal vez alguien más lo encuentre útil.

Solución para pantalla :

Organiza una sesión:

  • El bit SUID de la pantalla debe establecerse: - /
  • Abre la sesión con screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Únete a una sesión:

  • screen -x username/sessionname

Puede establecer bits de permiso para el usuario (* para todos) con :aclchgo :chacl. # agregado afectará a las ventanas,? agregado afectará los comandos.

Ejemplos:

  • :aclchg * -wx "#,?" configurará los permisos de sesión para que sean de solo lectura para todos los usuarios
  • :aclchg foo +w 2 dará acceso de escritura para el usuario foo en la ventana 2
  • :aclchg bar +x detach dará permiso para separar una sesión a la barra de usuario

Por lo que vale, creo que la solución tmux (aunque un poco más detallada) en realidad es "más limpia", ya que no implica dejar binarios setuid flotando alrededor del sistema de archivos.
Glifo

Desafortunadamente, tmux usó esto de esta manera tiene un problema de seguridad: aquellos a quienes les da acceso pueden crear fácilmente nuevas sesiones y hacer cosas en ellas que no están viendo.
Curt J. Sampson

9

Esto no es exclusivo de tmux, pero en este momento es lo que estoy usando:

Puede usar script -f /path/to/some/filepara escribir una sesión de terminal en un archivo. La -fopción actualiza el archivo mientras escribe.

Alguien más (con solo permisos de lectura para el archivo, si lo desea) puede hacer tail -fpara ver el archivo, su sesión de terminal. La -fopción hace tailque se genere lo que se agrega

La combinación de los dos "sincroniza" la vista de un terminal. Cuando se usa con tmux, también tiene la ventaja de evitar el cambio de tamaño que ocurre cuando ambos usuarios tienen resoluciones diferentes. Otra característica es que cada usuario puede trabajar en otra ventana o sesión privada.

Un inconveniente potencial es que algunos comandos (ncurses basados, por ejemplo) pueden hacer cosas extrañas a la salida, también secuencias de escape (colores). Sin embargo, estoy usando esto dentro de tmux, y parece que tmux soluciona esos problemas. Puedo ver que el otro usuario lee las páginas man y usa otros comandos que crean buffers, los colores se muestran correctamente, etc.

Sin embargo, esto no permite escribir en el terminal del otro (tal vez podría agregarse otra solución para eso).

Me gusta tener una ventana con dos paneles: un panel ejecutándose script -fpara que lo vea mi compañero, y otro junto a él donde tail -festá la terminal.

También funciona en ttys (y también se pueden usar tomas o tuberías con nombre para el archivo)


¡Me gusta tu respuesta! ¡Esto es simple y funcional!
JL
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.