Tmuxinator komut dosyasının geri kalanını tamamlamak için tmux'u SSH'ye kadar beklet


13

Yakın zamanda tmux ve Tmuxinator'u keşfettikten sonra, kullanmak için bir geliştirme ortamı kurmaya çalışıyorum.

Protokol başına, parolaları / parolaları komut dosyalarında depolamamıza izin verilmez. Yani aradığım şey, tmux'un SSH tünelinin ayarlanmasını beklemesidir (şifre verilir, girilir ve giriş yapılır).

Tmux 1.8+ sürümünde "bekle" komutu olduğunu biliyorum. Cygwin üzerinden 1.9a kullanıyorum. Ama belgeleri okuduğum halde, bunu anlamakta zorlanıyorum.

tmux new-session -s development -n editor -d
tmux split-window -v
tmux split-window -v

"Need to send to all panes.
tmux send-keys -t development 'ssh user@example.com' C-m

İşte sahip olduğum şeyin çok basit bir versiyonu.

Düşünceler? Senkronizasyon oturumları yapabileceğimi biliyorum, hala bu konuda karışıklıklar üzerinde çalışıyorum.

Düzenleme : Komutlara bakmak ve senkronize edilmiş bölmelerden değişkenleri bölmeden komuta çekmek. TMUX'un beni kullanıcı girişi için nasıl yönlendireceğini öğrenene kadar bu "daha iyi" bir yol olabilir.

Bir özellik isteği gönderebilir.


2
Neden şifre olmadan bağlanmıyorsunuz ve genel / özel anahtarı kullanmıyorsunuz?
YoMismo

Bana bu şekilde bağlanamayacağım söylendi. Teknik olarak yapabildiğim halde, uygulamaya konan politikalarla kabul edilemez. Ayrıca bu değişikliği (hızlı bir şekilde?) Yapmak için sesim / yetkim de yok. Yani benim durumumda, en az direniş yollarını incelerken, bunun bir vaat ettiği görülüyor.
Tango Bravo

1
Uzak kutuda tmux yüklü değil mi? Aksi takdirde, uzak kutuya ssh yapmak ve daha sonra tmux'u başlatmak çok daha iyi olur . // Ayrıca, ben size faydalanmak öneririm ~/.ssh/configdosyası: koymak Host foo, User userve Hostname example.comyapılandırma dosyasında üç ardışık hatlarında. Sonra ssh fooeşdeğer olur ssh user@example.com. // Belki böyle bir şey de yardımcı olur:command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
damien

Yanıtlar:


3

Bazı notlar wait-for

Bu nedenle, beklemenin temel ilkelerini diş açmaya benzer olduğunu düşünüyorsanız, beklemenin temel kullanımı çok karmaşık değildir.

Gerçekten diğer tmux işlevselliğine bağlı değil, sadece IPC'nin uygun bir uygulaması.

wait-for event_nameBir beklemek gibi bir olay wait-for -S event_name bir sinyal bir araçtır olayı

-UVe -Lseçenekler tür dik vardır ve gibi hareket semaforlarıyla

Sorunuzu doğrudan adresleme

Bu tür yarış koşullarını wait-forancak komutlar eşzamanlı olarak çözebilirsiniz .

tmux send-keys 'sync-command ; tmux wait-for -S command-finished' C-m
tmux wait-for command-finished

Burada yaşadığınız sorun ssh komutunun eşzamanlı olmamasıdır: ne zaman bittiğini söyleyemezsiniz.

El kitabına bakarak LocalCommandistediğimizi yapıyor gibi görünen yönergeyi bulabiliriz : bağlantı bittikten sonra yerel olarak bir komut çalıştırın, böylece

ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'

Yani "diğer işlevlere bağlı değil" ile kastedilen channel, sadece kendi ad alanındaki bir isimdir ve tmux'un önceden tanımlanmış "olayları" ile ilgisi yoktur?
ormaaj

wait-for -SMesaj teslimatını ve daha sync-commandönce bitirmeyi garanti etmezse yine de bir yarış sorunu olabilir wait-for.
ormaaj
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.