Minta tmux menunggu hingga saya SSH masuk, untuk menyelesaikan sisa skrip Tmuxinator

13

Setelah baru-baru ini menemukan tmux dan Tmuxinator, saya telah mencoba mengatur lingkungan pengembangan untuk digunakan.

Per protokol, kami tidak diizinkan untuk menyimpan kata sandi / frasa sandi dalam skrip. Jadi yang saya cari adalah menunggu tmux untuk menunggu terowongan SSH untuk diatur (kata sandi diberikan, masukkan ditekan, dan login).

Saya tahu bahwa ada perintah "menunggu" di tmux 1.8+. Saya menjalankan 1.9a melalui Cygwin. Tetapi meskipun saya sudah membaca dokumentasi, saya hanya mengalami kesulitan memahaminya.

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 [email protected]' C-m

Jadi, inilah versi yang sangat sederhana dari apa yang saya miliki.

Pikiran? Saya tahu saya bisa menyinkronkan-sesi, saya masih mengerjakan masalah dalam hal ini.

Sunting : Melihat ke perintah, dan menarik variabel dari panel ke perintah dari panel yang disinkronkan. Ini mungkin cara yang "lebih baik" untuk dilakukan, sampai saya dapat menemukan cara untuk mendapatkan TMUX untuk meminta saya input pengguna.

Mungkin mengeluarkan permintaan fitur.

Tango Bravo
sumber
2
Mengapa Anda tidak terhubung tanpa kata sandi dan menggunakan kunci publik / pribadi?
YoMismo
Saya diberitahu bahwa saya tidak dapat terhubung dengan cara itu. Meskipun secara teknis saya bisa , itu tidak dapat diterima dengan kebijakan yang telah diberlakukan. Saya juga tidak memiliki suara / otoritas untuk melakukan perubahan itu (cepat?). Jadi dalam kasus saya, dalam memeriksa jalan-jalan yang paling tidak resistan, ini sepertinya menjanjikan.
Tango Bravo
1
Saya menganggap bahwa kotak remote tidak memiliki tmux diinstal? Kalau tidak, akan jauh lebih baik untuk ssh ke kotak remote dan hanya kemudian meluncurkan tmux. // Juga, saya sarankan agar Anda menggunakan ~/.ssh/configfile Anda : put Host foo, User userdan Hostname example.compada tiga baris berturut-turut dalam file konfigurasi. Kemudian ssh foomenjadi setara dengan ssh [email protected]. // Mungkin sesuatu seperti ini juga membantu:command-prompt -p 'log in as:' -I '[email protected]' 'split-window -v -d %1; split-window -v -d %1'
damien

Jawaban:

3

Beberapa catatan wait-for

Jadi penggunaan dasar wait-for tidak terlalu rumit jika Anda menganggapnya analog dengan threading concurrency primitif

Ini tidak benar-benar terhubung ke fungsi tmux lain, hanya implementasi IPC yang nyaman.

wait-for event_nameseperti menunggu acara wait-for -S event_name adalah sarana memberi sinyal suatu acara

The -Udan -Lpilihan adalah jenis orthogonal dan bertindak seperti Semaphore

Mengatasi pertanyaan Anda secara langsung

Anda dapat memecahkan kondisi ras semacam ini dengan wait-fortetapi hanya jika perintah sinkron.

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

Masalah yang Anda miliki di sini adalah bahwa perintah ssh tidak sinkron: Anda tidak dapat mengetahui kapan perintah itu selesai.

Melihat melalui manual kita dapat menemukan LocalCommandarahan yang tampaknya melakukan apa yang kita inginkan: jalankan perintah secara lokal setelah koneksi selesai sehingga kita dapat memanggil

ssh [email protected] -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'
Att Righ
sumber
Jadi dengan "tidak terhubung ke fungsi lain" yang Anda maksud channeladalah hanya nama di namespace sendiri dan tidak terkait dengan "acara" tmux yang telah ditentukan?
ormaaj
Mungkin masih ada masalah balapan jika wait-for -Stidak menjamin pengiriman pesan dan sync-commandselesai sebelumnya wait-for.
ormaaj