Jakie są inne sposoby udostępniania sesji Tmux między dwoma użytkownikami?

106

Szukam czystego i łatwego sposobu na udostępnienie sesji tmux innemu użytkownikowi na tym samym komputerze. Wypróbowałem tę -S socket-pathopcję, ale wymaga to otwarcia wszystkich uprawnień ścieżki gniazda, zanim ktoś inny będzie mógł połączyć się z sesją. To działa, ale jest trochę niewygodne. Na przykład:

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

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

To działa, ale obaj użytkownicy mają teraz tę samą konfigurację tmux (konfigurację użytkownika, który zainicjował sesję). Czy istnieje sposób, aby zezwolić dwóm użytkownikom na używanie własnej konfiguracji tmux i własnych indywidualnych powiązań klawiszy tmux?

W przypadku punktów bonusowych najlepiej byłoby dać innym użytkownikom dostęp do sesji tmux tylko do odczytu.

Ryan McGeary
źródło
10
Jestem zbyt leniwy. Po prostu używam twojego pytania jako mojej odpowiedzi: D
phunehehe

Odpowiedzi:

46

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

wemux ulepsza tmux, aby multipleksowanie terminali dla wielu użytkowników było łatwiejsze i bardziej wydajne. Pozwala użytkownikom hostować serwer wemux i umożliwia klientom przyłączanie się:

Tryb lustrzany daje klientom (innym użytkownikom SSH na twoim komputerze) dostęp tylko do odczytu do sesji, pozwalając im zobaczyć, jak pracujesz, lub

Tryb parowania umożliwia klientowi i tobie pracę w tym samym terminalu (wspólny kursor)

Tryb Rogue pozwala klientowi na parowanie lub pracę niezależnie w innym oknie (osobne kursory) w tej samej sesji tmux.

Oferuje obsługę wielu serwerów, a także listę użytkowników i powiadomienia, gdy użytkownicy dołączają / odłączają się.

Jest to opakowanie shellscript na tmux - nie wymaga kompilacji.

Piotr
źródło
16

Próbowałem tego na Ubuntu, ale nie rozumiem, dlaczego to nie działa na innych wariantach unix.

Jeśli obaj użytkownicy są członkami wspólnej grupy, a ścieżka gniazda korzysta z tej grupy, obaj użytkownicy będą mogli dołączyć się dobrze.

Zamiast zmieniać uprawnienia do ścieżki gniazda za każdym razem, gdy ją tworzysz, możesz utworzyć specjalny katalog dla gniazd (użyłem / var / tmux).

Najpierw dodaj grupę dla użytkowników tmux

$ addgroup $TMUX_GROUP

Utwórz katalog z grupą ustawioną na $ TMUX_GROUP i użyj bitu setgid, aby pliki utworzone w tym katalogu automatycznie ustawiły grupę na $ TMUX_GROUP.

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

Następnie upewnij się, że użytkownicy, którzy chcą udostępnić sesję, są członkami $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Stephen Paulger
źródło
2
Jeśli masz system plików, który obsługuje listy ACL , nie musisz używać grupy (w szczególności nie potrzebujesz interwencji użytkownika root). Ale to nie rozwiązuje problemu udostępniania konfiguracji tmux , prawda?
Gilles
3
Aby stworzyć współdzieloną Sezon: tmux -S $TMUX_GROUP/shared-session. Aby dołączyć do niego z innego konta:tmux -S $TMUX_GROUP/shared-session attach
jfs
Powyższy komentarz (autorstwa @JFSebastian) powinien stanowić część odpowiedzi. Proponowana konfiguracja jest w porządku, ale odpowiedź jest niewystarczająca, gdy wyjaśnia się, jak z niej naprawdę korzystać. I dla wszystkich odpowiedzi na tej stronie, ta odpowiedź jest tą, która lepiej rozwiązuje problem.
Dr Beco
12

O ile mi wiadomo, nie można udostępniać sesji innym użytkownikom w „czysty” sposób.

Dostęp tylko do odczytu nie jest możliwy, jeśli klient nie używa -rprzełącznika.

Ponieważ inny ekran multipleksera terminali obsługuje funkcje, których szukasz, niestety również uciążliwy ... Nie jestem pewien, czy jest to dla ciebie opcja, ale może ktoś inny uzna to za przydatne.

Rozwiązanie dla ekranu :

Poprowadź sesję:

  • Należy ustawić bit SUID ekranu : - /
  • Otwórz sesję za pomocą screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Dołącz do sesji:

  • screen -x username/sessionname

Możesz ustawić bity uprawnień dla użytkownika (* dla wszystkich) za pomocą :aclchglub :chacl. # dołączone wpłynie na okna,? dołączone wpłynie na polecenia.

Przykłady:

  • :aclchg * -wx "#,?" ustawi uprawnienia sesji do odczytu tylko dla wszystkich użytkowników
  • :aclchg foo +w 2 zapewni dostęp do zapisu dla użytkownika foo w oknie 2
  • :aclchg bar +x detach zezwoli na odłączenie sesji od paska użytkownika
echox
źródło
Co do tego, co warto, wydaje mi się, że rozwiązanie tmux (choć nieco bardziej szczegółowe) jest w rzeczywistości „czystsze”, ponieważ nie wymaga pozostawiania binariów setuid unoszących się wokół systemu plików.
Glyph
Niestety, tmux używał tego w ten sposób, ma problem z bezpieczeństwem: ci, którym dajesz dostęp, mogą łatwo tworzyć nowe sesje i robić w nich rzeczy, których nie widzisz.
Curt J. Sampson,
9

Nie dotyczy to wyłącznie Tmux, ale teraz używam tego:

Możesz użyć script -f /path/to/some/filedo zapisania sesji terminala do pliku. -fOpcja aktualizuje plik podczas pisania.

Ktoś inny (z uprawnieniami tylko do odczytu pliku, jeśli chcesz) może zrobić, tail -faby zobaczyć plik, twoją sesję terminalową. Ta -fopcja powoduje, że taildane wyjściowe są dołączane.

Kombinacja dwóch „synchronizacji” widoku terminala. W połączeniu z tmux ma tę zaletę, że pozwala uniknąć zmiany rozmiaru, która występuje, gdy obaj użytkownicy mają różne rozdzielczości. Kolejną cechą jest to, że każdy użytkownik może pracować w innym prywatnym oknie lub sesji.

Jedną z potencjalnych niedogodności jest to, że niektóre polecenia (na przykład oparte na ncurses) mogą robić dziwne rzeczy na wyjściu, a także sekwencje specjalne (kolory). Jednak używam tego w tmuxie i wydaje się, że tmux rozwiązuje te problemy. Widzę, że inny użytkownik czyta strony podręcznika użytkownika i używa innych poleceń, które tworzą bufory, kolory są wyświetlane poprawnie itp.

Nie pozwala to jednak pisać sobie nawzajem na terminalach (być może można by do tego dodać inne rozwiązanie).

Lubię mieć okno z dwoma panelami: jedna szyba biegnie, script -faby mój rówieśnik mógł zobaczyć, a druga obok niej, gdzie tail -fjest terminal.

Działa również w ttys (do pliku można również użyć gniazd lub nazwanych potoków)

ferhtgoldaraz
źródło
Podoba mi się twoja odpowiedź! Jest to zarówno proste, jak i funkcjonalne!
JL