Bir tmux oturumunu iki kullanıcı arasında paylaşmanın diğer yolları nelerdir?


106

Aynı makinede bir tmux oturumunu başka bir kullanıcıyla paylaşmak için temiz ve kolay bir yol arıyorum. Bu -S socket-pathseçeneği denedim , ancak bir başkasının oturuma bağlanabilmesi için soket yolunun tüm izinlerini açmanız gerekiyor. Çalışıyor, ama biraz hantal. Örneğin:

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

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

Bu çalışır, ancak her iki kullanıcı da aynı tmux yapılandırmasını (oturumu başlatan kullanıcının yapılandırması) paylaşır. İki kullanıcının kendi tmux config ve kendi tmux anahtar bağlantılarını kullanmasına izin vermenin bir yolu var mı?

Bonus puanlar için, ideal olarak, tmux oturumunun salt okunur erişimini diğer kullanıcılara da vermek iyi olur.


10
Çok tembelim Sadece sorunuzu cevabım olarak kullanıyorum: D
phunehehe

Yanıtlar:


46

Gönderen https://github.com/zolrath/wemux :

wemux, çok kullanıcılı terminal çoğullamayı hem daha kolay hem de daha güçlü hale getirmek için tmux'u geliştirir. Kullanıcıların bir wemux sunucusuna ev sahipliği yapmasına ve istemcilerin ikisine de katılmasını sağlar:

Ayna Modu, müşterilere (makinenizdeki başka bir SSH kullanıcısı) oturuma salt okunur erişim sağlayarak, çalışmalarını görmelerini sağlar veya

Eşleştirme Modu, müşterinin ve kendinizin aynı terminalde çalışmasını sağlar (paylaşılan imleç)

Rogue Mode, müşterinin aynı tmux oturumunda başka bir pencerede (ayrı imleçler) bağımsız olarak eşleşmesine veya çalışmasına izin verir.

Çoklu sunucu desteğinin yanı sıra kullanıcılar eklendiğinde / çıkarıldığında kullanıcı listesinde ve bildirimlerde bulunur.

Tmux üzerinde bir kabuk komut dosyası sarmalayıcısıdır - derlemeye gerek yoktur.


16

Bunu Ubuntu'da denedim ama neden diğer unix türevlerinde işe yaramayacağını anlamıyorum.

Her iki kullanıcı da ortak bir grubun üyesiyse ve soket yolu bu grubu kullanıyorsa, her iki kullanıcı da para cezası ekleyebilir.

Her seferinde soket yolunun izinlerini değiştirmek zorunda kalmak yerine, soketler için belirli bir dizin oluşturabilirsiniz (Ben / var / tmux kullandım).

İlk önce tmux kullanıcıları için bir grup ekleyin

$ addgroup $TMUX_GROUP

Grubu $ TMUX_GROUP olarak ayarlanmış bir dizin oluşturun ve setgid bitini kullanın, böylece dizinde oluşturulan dosyalar otomatik olarak grubun $ TMUX_GROUP olarak ayarlanmış olmasını sağlar.

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

Ardından oturumu paylaşmak isteyen kullanıcıların $ TMUX_GROUP üyesi olduklarından emin olun

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

2
ACL'leri destekleyen bir dosya sisteminiz varsa , bir grup kullanmanıza gerek yoktur (özellikle de herhangi bir kök müdahalesine ihtiyacınız yoktur). Ancak bu, tmux yapılandırmasını paylaşma sorununu çözmüyor, değil mi?
Gilles

3
Paylaşılan Sesion oluşturmak için: tmux -S $TMUX_GROUP/shared-session. Başka bir hesaptan eklemek için:tmux -S $TMUX_GROUP/shared-session attach
jfs

Yukarıdaki yorum (@JFSebastian tarafından) cevabın bir parçası olmalıdır. Önerilen kurulum tamam, ancak gerçek kullanım şeklini açıklarken cevap yetersiz kalıyor. Ve bu sayfadaki tüm cevaplar için bu cevap, soruna daha iyi cevap veren cevaptır.
Dr Beco,

12

Bildiğim kadarıyla, oturumları diğer kullanıcılarla "temiz" bir şekilde paylaşmak mümkün değil.

Ayrıca istemci -ranahtarı kullanmıyorsa salt okunur erişim mümkün değildir .

Başka bir terminal çoklayıcı ekranı , aradığınız özellikleri ne yazık ki aynı zamanda hantal bir şekilde de desteklediğinden ... Bunun sizin için bir seçenek olup olmadığından emin değilim, ama belki başka biri bunu faydalı bulabilir.

Ekran için çözüm :

Bir oturuma ev sahipliği yapın:

  • Ekranın SUID biti ayarlanmalıdır: - /
  • İle oturumu aç screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Bir oturuma katılın:

  • screen -x username/sessionname

Kullanıcı için izin bitlerini (herkes için *) :aclchgveya ile ayarlayabilirsiniz :chacl. # eklenen pencereleri etkileyecek,? ekli komutları etkileyecektir.

Örnekler:

  • :aclchg * -wx "#,?" oturum izinlerini yalnızca tüm kullanıcılar için okuyacak
  • :aclchg foo +w 2 2. penceredeki kullanıcı foolarına yazma erişimi verecek
  • :aclchg bar +x detach bir oturumu kullanıcı çubuğuna ayırma izni verecek

Buna değecekse, tmux çözümünün (biraz daha ayrıntılı olmasına rağmen) aslında "temiz" olduğunu hissediyorum, çünkü dosya sistemi etrafında yüzen setuid ikili dosyalarının bırakılmasını gerektirmez.
Glif

Ne yazık ki, bu şekilde kullanılan tmux'un bir güvenlik sorunu var: erişim izni verdiğiniz kişiler kolayca yeni oturumlar oluşturabilir ve içinde görmediğiniz şeyler yapabilir.
Curt J. Sampson

9

Bu tmux'a özel değil, fakat şu an kullandığım şey:

script -f /path/to/some/fileBir dosyaya terminal oturumu yazmak için kullanabilirsiniz . -fYazarken seçenek dosyasını günceller.

Bir başkası (yalnızca okuma izinleri varsa dosyaya, isterseniz) tail -fdosyayı, terminal oturumunuzu görebilir. -fSeçenek yapar taileklenen alır ne olursa olsun çıkış.

İki "senk" kombinasyonu bir terminal görünümünü. Tmux ile birlikte kullanıldığında, her iki kullanıcı da farklı çözünürlüklerde olduğunda yeniden boyutlandırmadan kaçınma avantajına sahiptir. Diğer bir özellik de, her kullanıcının başka bir özel pencere veya oturumda çalışabilmesidir.

Potansiyel bir rahatsızlık, bazı komutların (örneğin ncurses) çıktıya garip şeyler yapabilmesi, kaçış dizileri de (renkler) yapabilmesidir. Ancak bunu tmux içinde kullanıyorum ve tmux'un bu sorunları düzelttiği görülüyor. Diğer kullanıcının man sayfalarını okuduğunu ve arabellek oluşturan diğer komutları kullandığını, renklerin doğru görüntülendiğini vb. Görebiliyorum.

Bu olsa da birbirlerinin terminaline yazmaya izin vermiyor (belki bunun için başka bir çözüm eklenebilir).

İki bölmeli bir pencereye sahip olmak isterim: bir script -farkadaşımın görmesi için çalışan bir bölme , diğeri tail -fterminalin olduğu yerde .

Ttys de çalışır (ve dosya için de soketler veya adlandırılmış borular kullanılabilir)


Cevabını beğendim! Bu hem basit hem de işlevsel!
JL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.