Chiedi a tmux di attendere fino a quando SSH, per completare il resto dello script di Tmuxinator


13

Dopo aver scoperto di recente tmux e Tmuxinator, ho cercato di creare un ambiente di sviluppo da utilizzare.

Per protocollo, non è consentito memorizzare password / passphrase negli script. Quindi quello che sto cercando è aspettare che tmux attenda che il tunnel SSH venga configurato (password fornita, invio premuto e accesso).

So che c'è un comando "wait-for" in tmux 1.8+. Sto eseguendo 1.9a tramite Cygwin. Ma anche se ho letto la documentazione, sto solo facendo fatica a capirla.

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

Quindi, ecco una versione molto semplice di quello che ho.

Pensieri? So di poter sincronizzare le sessioni, sto ancora elaborando i nodi in questo.

Modifica : esamina i comandi e estrae le variabili dal riquadro al comando dai pannelli sincronizzati. Questo potrebbe essere un modo "migliore" di procedere, fino a quando non riesco a capire come convincere TMUX a richiedere l'input dell'utente.

Potrebbe emettere una richiesta di funzionalità.


2
Perché non ti connetti senza la password e usi la chiave pubblica / privata?
YoMismo,

Mi è stato detto che non potevo collegarmi in quel modo. Anche se tecnicamente potrei , non è accettabile con le politiche che sono state messe in atto. Nemmeno io ho voce / autorità per fare quel cambiamento (velocemente?). Quindi nel mio caso, nell'esaminare le strade di minor resistenza, questo sembra avere delle promesse.
Tango Bravo,

1
Suppongo che la casella remota non abbia installato tmux? Altrimenti sarebbe molto meglio lanciarsi nella casella remota e solo allora avviare tmux. // Inoltre, io suggerirei che si fanno uso del ~/.ssh/configfile di: put Host foo, User usere Hostname example.comsu tre righe consecutive nel file di configurazione. Quindi ssh foodiventa equivalente a ssh user@example.com. // Forse anche qualcosa del genere aiuta:command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
damien,

Risposte:


3

Alcune note di wait-for

Quindi l'uso di base di wait-for non è troppo complicato se lo si considera analogo al threading di primitivi di concorrenza

Non è realmente collegato ad altre funzionalità di tmux, ma solo una comoda implementazione di IPC.

wait-for event_nameè come aspettare un evento wait-for -S event_name è un mezzo per segnalare un evento

Le opzioni -Ue -Lsono di tipo ortogonale e si comportano come semafori

Affrontare direttamente la tua domanda

Puoi risolvere questo tipo di condizioni di gara con, wait-forma solo se i comandi sono sincroni.

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

Il problema che hai qui è che il comando ssh non è sincrono: non puoi dire quando è finito.

Esaminando il manuale possiamo trovare la LocalCommanddirettiva che sembra fare ciò che vogliamo: eseguire un comando localmente al termine della connessione in modo da poter chiamare

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

Quindi per "non connesso ad altre funzionalità" intendi che channelè solo un nome nel suo spazio dei nomi e non correlato agli "eventi" predefiniti di tmux?
ormaaj,

Potrebbe esserci ancora un problema di gara se wait-for -Snon garantisce la consegna del messaggio e le sync-commandfiniture prima wait-for.
ormaaj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.