มีวิธีอื่นในการแบ่งปันเซสชัน 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 อนุญาตให้ไคลเอนต์จับคู่หรือทำงานอย่างอิสระในหน้าต่างอื่น (เคอร์เซอร์แยก) ในเซสชั่น tmux เดียวกัน

มันมีการสนับสนุนหลายเซิร์ฟเวอร์เช่นเดียวกับรายชื่อผู้ใช้และการแจ้งเตือนเมื่อผู้ใช้แนบ / แยก

มันเป็น wrapper shellscript บน tmux - ไม่จำเป็นต้องรวบรวม


16

ฉันได้ลองสิ่งนี้บน Ubuntu แต่ไม่เห็นว่าทำไมมันไม่ทำงานกับ unix รุ่นอื่น ๆ

หากผู้ใช้ทั้งสองเป็นสมาชิกของกลุ่มทั่วไปและซ็อกเก็ตพา ธ ใช้กลุ่มนั้นผู้ใช้ทั้งสองจะสามารถแนบไฟล์ได้

แทนที่จะต้องเปลี่ยนการอนุญาตของซ็อกเก็ตพา ธ ทุกครั้งที่คุณสร้างขึ้นคุณสามารถสร้างไดเรกทอรีเฉพาะสำหรับซ็อกเก็ต (ฉันใช้ / var / tmux)

เพิ่มกลุ่มแรกสำหรับผู้ใช้ tmux

$ addgroup $TMUX_GROUP

สร้างไดเร็กทอรีโดยตั้งกลุ่มเป็น $ TMUX_GROUP และใช้ setgid bit เพื่อให้ไฟล์ที่สร้างขึ้นภายในไดเรกทอรีนั้นมีกลุ่มที่ตั้งเป็น $ 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 ใช่ไหม?
Gilles

3
เพื่อสร้าง sesion tmux -S $TMUX_GROUP/shared-sessionที่ใช้ร่วมกัน: หากต้องการแนบไปกับบัญชีอื่น:tmux -S $TMUX_GROUP/shared-session attach
jfs

ความคิดเห็นด้านบน (โดย @JFSebastian) ควรเป็นส่วนหนึ่งของคำตอบ การตั้งค่าที่เสนอนั้นใช้ได้ แต่คำตอบนั้นสั้นเมื่ออธิบายวิธีการใช้งานจริง และสำหรับคำตอบทั้งหมดในหน้านี้คำตอบนี้เป็นคำตอบที่แก้ไขปัญหาได้ดีกว่า
ดร. Beco

12

เท่าที่ฉันรู้มันเป็นไปไม่ได้ที่จะแบ่งปันเซสชันกับผู้ใช้คนอื่นในลักษณะ "สะอาด"

การเข้าถึงแบบอ่านอย่างเดียวเป็นไปไม่ได้ถ้าไคลเอ็นต์ไม่ได้ใช้-rสวิตช์

หน้าจอเทอร์มินัลมัลติเพล็กเซอร์อื่นรองรับคุณสมบัติที่คุณกำลังมองหาน่าเศร้าในทางที่ยุ่งยาก ... ฉันไม่แน่ใจว่านี่เป็นตัวเลือกสำหรับคุณ แต่อาจมีบางคนที่เป็นประโยชน์

โซลูชันสำหรับหน้าจอ :

โฮสต์เซสชัน:

  • ต้องตั้งค่าบิตของหน้าจอ : - /
  • เปิดเซสชันด้วย screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

เข้าร่วมเซสชั่น:

  • screen -x username/sessionname

คุณสามารถตั้งค่าบิตได้รับอนุญาตสำหรับผู้ใช้ (* สำหรับทุก) ด้วยหรือ:aclchg :chacl# ต่อท้ายจะมีผลกับ windows,? ผนวกจะมีผลต่อคำสั่ง

ตัวอย่าง:

  • :aclchg * -wx "#,?" จะตั้งค่าสิทธิ์เซสชันเพื่ออ่านอย่างเดียวสำหรับผู้ใช้ทั้งหมด
  • :aclchg foo +w 2 จะให้สิทธิ์การเขียนแก่ผู้ใช้ foo บนหน้าต่าง 2
  • :aclchg bar +x detach จะให้สิทธิ์ในการแยกเซสชั่นให้กับแถบผู้ใช้

สำหรับสิ่งที่คุ้มค่าฉันรู้สึกว่าโซลูชัน tmux (แม้ว่าจะละเอียดมากกว่าเล็กน้อย) จริง ๆ แล้วก็“ สะอาดกว่า” เพราะมันไม่ได้เกี่ยวข้องกับการปล่อย setuid ไบนารีที่ลอยอยู่รอบ ๆ ระบบไฟล์
Glyph

น่าเสียดายที่ tmux ใช้วิธีนี้มีปัญหาด้านความปลอดภัย: ผู้ที่คุณให้สิทธิ์เข้าถึงสามารถสร้างเซสชันใหม่ได้อย่างง่ายดายและทำสิ่งต่าง ๆ ในสิ่งที่คุณไม่เห็น
Curt J. Sampson

9

นี่ไม่ใช่เอกสิทธิ์ของ tmux แต่ตอนนี้มันเป็นสิ่งที่ฉันใช้:

คุณสามารถใช้script -f /path/to/some/fileเพื่อเขียนเทอร์มินัลเซสชันไปยังไฟล์ -fตัวเลือกการปรับปรุงแฟ้มขณะที่คุณพิมพ์

คนอื่น (มีสิทธิ์อ่านไฟล์เท่านั้นหากคุณต้องการ) สามารถทำได้tail -fเพื่อดูไฟล์เทอร์มินัลเซสชันของคุณ -fตัวเลือกที่จะทำให้tailการส่งออกสิ่งที่ได้รับการผนวก

การรวมกันของทั้งสอง "ซิงค์" มุมมองของเทอร์มินัล เมื่อใช้กับ tmux มันยังมีข้อได้เปรียบในการหลีกเลี่ยงการปรับขนาดที่เกิดขึ้นเมื่อผู้ใช้ทั้งสองมีความละเอียดที่แตกต่างกัน คุณสมบัติอื่นคือผู้ใช้แต่ละคนสามารถทำงานในหน้าต่างหรือเซสชันส่วนตัวอื่นได้

ความไม่สะดวกที่อาจเกิดขึ้นอย่างหนึ่งคือคำสั่งบางอย่าง (ตัวอย่างเช่น ncurses) อาจทำสิ่งแปลก ๆ กับเอาต์พุต อย่างไรก็ตามฉันใช้สิ่งนี้ภายใน tmux และดูเหมือนว่า tmux จะแก้ไขปัญหาเหล่านั้นได้ ฉันเห็นผู้ใช้คนอื่นอ่าน man page และใช้คำสั่งอื่นที่สร้างบัฟเฟอร์สีจะแสดงขึ้นทางด้านขวา ฯลฯ

สิ่งนี้ไม่อนุญาตให้เขียนถึงเทอร์มินัลของกันและกัน (บางทีอาจมีการแก้ปัญหาอื่น ๆ เพิ่มเติม)

ฉันชอบที่จะมีหน้าต่างที่มีบานหน้าต่างสองบาน: บานหน้าต่างบานหนึ่งที่เปิดscript -fให้เพื่อนของฉันมองเห็นอีกบานหนึ่งถัดจากที่ฉันtail -fเป็นเทอร์มินัล

มันใช้งานได้ใน ttys เช่นกัน (และซ็อกเก็ตหรือไพพ์ที่มีชื่ออาจใช้กับไฟล์ด้วย)


ฉันชอบคำตอบของคุณ! นี่คือทั้งง่ายและใช้งานได้!
JL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.