Những cách khác để chia sẻ một phiên tmux giữa hai người dùng là gì?


106

Tôi đang tìm kiếm một cách dễ dàng và dễ dàng để chia sẻ phiên tmux với người dùng khác trên cùng một máy. Tôi đã thử -S socket-pathtùy chọn này, nhưng nó yêu cầu mở tất cả các quyền của đường dẫn ổ cắm trước khi người khác có thể kết nối với phiên. Nó hoạt động, nhưng nó hơi cồng kềnh. Ví dụ:

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

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

Điều này hoạt động, nhưng cả hai người dùng hiện chia sẻ cùng một cấu hình tmux (cấu hình của người dùng đã khởi tạo phiên). Có cách nào để cho phép hai người dùng sử dụng cấu hình tmux của riêng họ và các ràng buộc khóa tmux riêng của họ không?

Đối với các điểm thưởng, lý tưởng nhất, cũng sẽ rất tuyệt khi cấp quyền truy cập chỉ đọc của phiên tmux cho người dùng khác.


10
Tôi quá lười biếng Tôi chỉ sử dụng câu hỏi của bạn làm câu trả lời của mình: D
phunehehe

Câu trả lời:


46

Từ https://github.com/zolrath/wemux :

wemux tăng cường tmux để làm cho việc ghép kênh thiết bị đầu cuối đa người dùng dễ dàng hơn và mạnh mẽ hơn. Nó cho phép người dùng lưu trữ một máy chủ wemux và có khách hàng tham gia:

Chế độ gương cho phép khách hàng (một người dùng SSH khác trên máy của bạn) truy cập chỉ đọc vào phiên, cho phép họ thấy bạn làm việc hoặc

Chế độ ghép đôi cho phép khách hàng và chính bạn làm việc trong cùng một thiết bị đầu cuối (con trỏ dùng chung)

Chế độ Rogue cho phép khách hàng ghép nối hoặc làm việc độc lập trong một cửa sổ khác (các con trỏ riêng biệt) trong cùng một phiên tmux.

Nó có tính năng hỗ trợ đa máy chủ cũng như danh sách người dùng và thông báo khi người dùng đính kèm / tách.

Nó là một trình bao bọc shellscript trên tmux - không cần biên dịch.


16

Tôi đã thử điều này trên Ubuntu nhưng không hiểu tại sao nó không hoạt động trên các biến thể unix khác.

Nếu cả hai người dùng là thành viên của một nhóm chung và đường dẫn ổ cắm sử dụng nhóm đó, cả hai người dùng sẽ có thể đính kèm tốt.

Thay vì phải thay đổi quyền của đường dẫn socket mỗi khi bạn tạo một thư mục, bạn có thể tạo một thư mục cụ thể cho socket (tôi đã sử dụng / var / tmux).

Đầu tiên thêm một nhóm cho người dùng tmux

$ addgroup $TMUX_GROUP

Tạo một thư mục với nhóm được đặt thành $ TMUX_GROUP và sử dụng bit setgid để các tệp được tạo trong thư mục tự động đặt nhóm thành $ TMUX_GROUP.

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

Tiếp theo, đảm bảo người dùng muốn chia sẻ phiên là thành viên của $ TMUX_GROUP

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

2
Nếu bạn có một hệ thống tập tin hỗ trợ ACL , bạn không cần sử dụng một nhóm (và đặc biệt bạn không cần bất kỳ sự can thiệp gốc nào). Nhưng điều này không giải quyết được vấn đề chia sẻ cấu hình tmux , phải không?
Gilles

3
Để tạo mè chia sẻ : tmux -S $TMUX_GROUP/shared-session. Để đính kèm với nó từ một tài khoản khác:tmux -S $TMUX_GROUP/shared-session attach
jfs

Nhận xét trên (bởi @JFSebastian) nên là một phần của câu trả lời. Các thiết lập được đề xuất là ok, nhưng câu trả lời ngắn gọn khi giải thích làm thế nào để thực sự sử dụng nó. Và đối với tất cả các câu trả lời trong trang này, câu trả lời này là câu trả lời tốt hơn cho vấn đề.
Bác sĩ Beco

12

Theo tôi biết, không thể chia sẻ phiên với người dùng khác theo cách "sạch".

Cũng không thể truy cập chỉ đọc, nếu khách hàng không sử dụng công -rtắc.

Vì một màn hình ghép kênh đầu cuối khác hỗ trợ các tính năng mà bạn đang tìm kiếm, thật đáng buồn là theo cách rườm rà ... Tôi không chắc đây có phải là một tùy chọn cho bạn không, nhưng có lẽ ai đó sẽ thấy điều này hữu ích.

Giải pháp cho màn hình :

Tổ chức một phiên:

  • Phải đặt bit SUID của màn hình : - /
  • Mở phiên với screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Tham gia một phiên:

  • screen -x username/sessionname

Bạn có thể đặt các bit quyền cho người dùng (* cho tất cả) bằng :aclchghoặc :chacl. # nối sẽ ảnh hưởng đến windows ,? nối thêm sẽ ảnh hưởng đến các lệnh.

Ví dụ:

  • :aclchg * -wx "#,?" sẽ đặt quyền phiên chỉ đọc cho tất cả người dùng
  • :aclchg foo +w 2 sẽ cấp quyền truy cập ghi cho người dùng foo trên cửa sổ 2
  • :aclchg bar +x detach sẽ cho phép tách phiên làm việc với thanh người dùng

Đối với những gì nó có giá trị, tôi cảm thấy rằng giải pháp tmux (mặc dù dài dòng hơn một chút) thực sự "sạch" hơn, vì nó không liên quan đến việc để các nhị phân setuid trôi nổi xung quanh hệ thống tập tin.
Glyph

Thật không may, tmux đã sử dụng điều này theo cách này có một vấn đề bảo mật: những người mà bạn cấp quyền truy cập có thể dễ dàng tạo các phiên mới và thực hiện những điều mà họ không thấy.
Curt J. Sampson

9

Đây không phải là độc quyền của tmux, nhưng ngay bây giờ nó là thứ tôi đang sử dụng:

Bạn có thể sử dụng script -f /path/to/some/fileđể viết một phiên cuối vào một tệp. Các -ftùy chọn cập nhật các tập tin trong khi bạn gõ.

Một số người khác (chỉ có quyền đọc tệp, nếu bạn muốn) có thể làm tail -fđể xem tệp, phiên cuối của bạn. Các -ftùy chọn làm cho tailđầu ra bất cứ điều gì được nối.

Sự kết hợp của hai "đồng bộ hóa" khung nhìn của một thiết bị đầu cuối. Khi được sử dụng với tmux, nó cũng có ưu điểm là tránh thay đổi kích thước xảy ra khi cả hai người dùng có độ phân giải khác nhau. Một đặc điểm khác là mỗi người dùng có thể làm việc trên một cửa sổ hoặc phiên riêng tư khác.

Một bất tiện tiềm ẩn là một số lệnh (ví dụ dựa trên ncurses) có thể làm những điều kỳ lạ đối với đầu ra, cũng thoát các chuỗi (màu sắc). Tuy nhiên, tôi đang sử dụng cái này bên trong tmux và có vẻ như tmux đã khắc phục những vấn đề đó. Tôi có thể thấy người dùng khác đọc các trang man và sử dụng các lệnh khác tạo bộ đệm, màu sắc được hiển thị đúng, v.v.

Điều này không cho phép ghi vào thiết bị đầu cuối của nhau mặc dù (có thể một số giải pháp khác có thể được thêm vào cho điều đó).

Tôi muốn có một cửa sổ với hai cửa sổ: một cửa sổ đang chạy script -fđể bạn bè của tôi nhìn thấy, một cửa sổ khác bên cạnh cửa sổ nơi tôi tail -flà thiết bị đầu cuối.

Nó cũng hoạt động trong ttys (và ổ cắm hoặc ống có tên cũng có thể được sử dụng cho tệp)


Tôi thích câu trả lời của bạn! Đây là cả đơn giản và chức năng!
JL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.