Каковы другие способы разделения сеанса tmux между двумя пользователями?

106

Я ищу простой и понятный способ поделиться сеансом tmux с другим пользователем на той же машине. Я попробовал эту -S socket-pathопцию, но она требует открытия всех разрешений пути сокета, прежде чем кто-то еще сможет подключиться к сеансу. Это работает, но это немного громоздко. Например:

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

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

Это работает, но оба пользователя теперь используют одну и ту же конфигурацию tmux (конфигурацию пользователя, инициировавшего сеанс). Есть ли способ позволить двум пользователям использовать их собственную конфигурацию tmux и их собственные индивидуальные привязки ключей tmux?

Что касается бонусных баллов, в идеале было бы неплохо предоставить другим пользователям доступ только для чтения сеанса tmux.

Райан МакГири
источник
10
Мне лень, я просто использую ваш вопрос в качестве ответа: D
phunehehe

Ответы:

46

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

wemux расширяет возможности tmux, делая мультиплексирование многопользовательских терминалов более простым и мощным. Это позволяет пользователям размещать сервер wemux и подключать клиентов к любому из них:

Зеркальный режим предоставляет клиентам (другому пользователю SSH на вашем компьютере) доступ только для чтения к сеансу, позволяя им видеть вашу работу или

Парный режим позволяет клиенту и вам работать в одном терминале (общий курсор)

Rogue Mode позволяет клиенту подключаться или работать независимо в другом окне (отдельных курсорах) в одном сеансе tmux.

Он имеет поддержку нескольких серверов, а также список пользователей и уведомления, когда пользователи присоединяются / отсоединяются.

Это оболочка для оболочки через tmux - компиляция не требуется.

Питер
источник
16

Я пробовал это на Ubuntu, но не понимаю, почему это не будет работать на других вариантах Unix.

Если оба пользователя являются членами общей группы, и путь к сокету использует эту группу, оба пользователя смогут присоединиться нормально.

Вместо того, чтобы менять разрешения пути к сокету при каждом его создании, вы можете создать специальный каталог для сокетов (я использовал / var / tmux).

Сначала добавьте группу для пользователей tmux

$ addgroup $TMUX_GROUP

Создайте каталог с группой, установленной в $ TMUX_GROUP, и используйте бит setgid, чтобы для файлов, созданных в каталоге, автоматически была установлена ​​группа в $ TMUX_GROUP.

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

Затем убедитесь, что пользователи, которые хотят поделиться сессией, являются членами $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Стивен Полгер
источник
2
Если у вас есть файловая система, которая поддерживает ACL , вам не нужно использовать группу (и, в частности, вам не нужно никакого корневого вмешательства). Но это не решает проблему совместного использования конфигурации tmux , не так ли?
Жиль
3
Чтобы создать разделяемую Sesion: tmux -S $TMUX_GROUP/shared-session. Чтобы прикрепить к нему из другого аккаунта:tmux -S $TMUX_GROUP/shared-session attach
jfs
Комментарий выше (автор @JFSebastian) должен быть частью ответа. Предложенная установка в порядке, но ответ не дает объяснения, как ее реально использовать. И для всех ответов на этой странице этот ответ лучше всего подходит для решения проблемы.
Доктор Беко
12

Насколько я знаю, невозможно делиться сессиями с другими пользователями "чистым" способом.

Также доступ только для чтения невозможен, если клиент не использует -rкоммутатор.

Так как другой экран мультиплексора терминала поддерживает функции, которые вы ищете, к сожалению, также громоздко ... Я не уверен, если это вариант для вас, но, возможно, кто-то другой найдет это полезным.

Решение для экрана :

Провести сеанс:

  • SUID бит экрана должен быть установлен: - /
  • Откройте сессию с screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Присоединиться к сеансу:

  • screen -x username/sessionname

Вы можете установить биты прав доступа для пользователя (* для всех) с помощью :aclchgили :chacl. # добавлено будет влиять на окна,? добавлено будет влиять на команды.

Примеры:

  • :aclchg * -wx "#,?" установит разрешения сеанса только для чтения для всех пользователей
  • :aclchg foo +w 2 предоставит доступ на запись для пользователя foo в окне 2
  • :aclchg bar +x detach даст разрешение на отключение сеанса от панели пользователя
echox
источник
Что бы это ни стоило, я чувствую, что решение tmux (хотя и несколько более многословное) на самом деле «чище», так как оно не предполагает оставления двоичных файлов setuid, плавающих вокруг файловой системы.
Символ
К сожалению, tmux использовал это таким образом, имеет проблему с безопасностью: те, кому вы предоставляете доступ, могут легко создавать новые сеансы и делать в них то, что вы не видите.
Курт Дж. Сэмпсон
9

Это не только для tmux, но сейчас я использую:

Вы можете использовать script -f /path/to/some/fileдля записи сеанса терминала в файл. -fОпция обновляет файл при вводе.

Кто-то другой (с разрешениями только на чтение файла, если хотите) может сделать tail -fдля просмотра файла ваш сеанс терминала. -fОпция делает tailвывод любых добавляемый.

Комбинация двух «синхронизирует» вид терминала. При использовании с tmux он также имеет преимущество в том, что позволяет избежать изменения размера, которое происходит, когда оба пользователя имеют разные разрешения. Другая особенность заключается в том, что каждый пользователь может работать с другим частным окном или сеансом.

Одно потенциальное неудобство состоит в том, что некоторые команды (например, основанные на ncurses) могут делать странные вещи с выводом, а также escape-последовательности (цвета). Тем не менее, я использую это внутри tmux, и кажется, что tmux решает эти проблемы. Я вижу, как другой пользователь читает справочные страницы и использует другие команды для создания буферов, цвета отображаются правильно и т. Д.

Это не позволяет записывать в терминалы друг друга, хотя (возможно, для этого может быть добавлено другое решение).

Мне нравится, когда у меня есть окно с двумя панелями: одна панель работает, script -fчтобы мой коллега мог видеть, другая - рядом с ней, где я tail -f- терминал.

Он также работает в ttys (и сокеты или именованные каналы могут быть использованы для файла)

ferhtgoldaraz
источник
Мне нравится твой ответ! Это и просто, и функционально!
JL