Haga que tmux espere hasta que ingrese SSH para completar el resto del script de Tmuxinator

13

Después de descubrir recientemente tmux y Tmuxinator, he estado tratando de configurar un entorno de desarrollo para usar.

Por protocolo, no podemos almacenar contraseñas / frases de contraseña en scripts. Entonces, lo que estoy buscando es esperar a que tmux espere a que se configure el túnel SSH (contraseña suministrada, ingresar presionada e iniciar sesión).

Sé que hay un comando "esperar" en tmux 1.8+. Estoy ejecutando 1.9a a través de Cygwin. Pero a pesar de que he leído la documentación, me está costando entenderla.

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

Entonces, aquí hay una versión muy simple de lo que tengo.

Pensamientos? Sé que puedo sincronizar sesiones, todavía estoy resolviendo los problemas en esto.

Editar : Buscar comandos y extraer variables del panel al comando desde paneles sincronizados. Esta podría ser una "mejor" forma de hacerlo, hasta que pueda descubrir cómo hacer que TMUX me solicite la entrada del usuario.

Podría emitir una solicitud de función.

Tango Bravo
fuente
2
¿Por qué no te conectas sin la contraseña y usas la clave pública / privada?
YoMismo
Me dijeron que no podía conectarme de esa manera. Aunque técnicamente podría , no es aceptable con las políticas que se han implementado. Tampoco tengo voz / autoridad para hacer ese cambio (¿rápido?) Tampoco. Entonces, en mi caso, al examinar los caminos de menor resistencia, esto parece ser prometedor.
Tango Bravo
1
¿Supongo que la caja remota no tiene instalado tmux? De lo contrario, sería mucho mejor ssh en la caja remota y solo entonces iniciar tmux. // Además, me gustaría sugerir que haga uso de su ~/.ssh/configarchivo: put Host foo, User usery Hostname example.comen tres líneas consecutivas en el archivo de configuración. Entonces se ssh fooconvierte en equivalente a ssh [email protected]. // Quizás algo como esto también ayude:command-prompt -p 'log in as:' -I '[email protected]' 'split-window -v -d %1; split-window -v -d %1'
damien

Respuestas:

3

Algunas notas de wait-for

Por lo tanto, el uso básico de esperar no es demasiado complicado si lo considera análogo a las primitivas de concurrencia de subprocesos

No está realmente conectado a otra funcionalidad tmux, solo una implementación conveniente de IPC.

wait-for event_namees como esperar un evento wait-for -S event_name es un medio de señalizar un evento

Las opciones -Uy -Lson ortogonales y actúan como semáforos.

Dirigiendo su pregunta directamente

Puede resolver este tipo de condición de carrera wait-forpero solo si los comandos son sincrónicos.

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

El problema que tiene aquí es que el comando ssh no es síncrono: no puede saber cuándo ha terminado.

Mirando el manual podemos encontrar la LocalCommanddirectiva que parece hacer lo que queremos: ejecutar un comando localmente después de que la conexión haya finalizado para que podamos llamar

ssh [email protected] -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'
Att Righ
fuente
Entonces, por "no conectado a otra funcionalidad", ¿quiere decir que channeles solo un nombre en su propio espacio de nombres y no está relacionado con los "eventos" predefinidos de tmux?
ormaaj
Todavía podría haber un problema de carrera si wait-for -Sno garantiza la entrega del mensaje y los sync-commandacabados anteriores wait-for.
ormaaj