Faire attendre tmux jusqu'à ce que je SSH, pour terminer le reste du script Tmuxinator

13

Après avoir récemment découvert tmux et Tmuxinator, j'ai essayé de configurer un environnement de développement à utiliser.

Par protocole, nous ne sommes pas autorisés à stocker les mots de passe / phrases de passe dans des scripts. Donc, ce que je recherche, c'est une attente pour que tmux attende que le tunnel SSH soit configuré (mot de passe fourni, entrez pressé et connecté).

Je sais qu'il y a une commande "wait-for" dans tmux 1.8+. J'utilise 1.9a via Cygwin. Mais même si j'ai relu la documentation, j'ai du mal à la comprendre.

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

Voici donc une version très simple de ce que j'ai.

Pensées? Je sais que je peux synchroniser les sessions, je suis toujours en train de résoudre les problèmes.

Modifier : examiner les commandes et extraire les variables du volet vers la commande des volets synchronisés. Cela pourrait être une "meilleure" façon de procéder, jusqu'à ce que je sache comment faire en sorte que TMUX me demande une entrée utilisateur.

Peut émettre une demande de fonctionnalité.

Tango Bravo
la source
2
Pourquoi ne vous connectez-vous pas sans le mot de passe et n'utilisez-vous pas de clé publique / privée?
YoMismo
On m'a dit que je ne pouvais pas me connecter de cette façon. Bien que je puisse techniquement le faire , ce n'est pas acceptable avec les politiques qui ont été mises en place. Je n'ai pas non plus de voix / autorité pour effectuer ce changement (rapidement?). Donc dans mon cas, en examinant les routes de moindre résistance, cela semble prometteur.
Tango Bravo
1
Je suppose que le boîtier distant n'a pas installé tmux? Sinon, il serait préférable de lancer ssh dans la boîte distante et de ne lancer que tmux. // Aussi, je vous suggère d'utiliser votre ~/.ssh/configfichier: put Host foo, User useret Hostname example.comsur trois lignes consécutives dans le fichier de configuration. Devient ssh fooalors équivalent à ssh [email protected]. // Peut-être que quelque chose comme ça aide aussi:command-prompt -p 'log in as:' -I '[email protected]' 'split-window -v -d %1; split-window -v -d %1'
damien

Réponses:

3

Quelques notes de wait-for

Donc, l'utilisation de base de l'attente n'est pas trop compliquée si vous la considérez comme analogue au filetage des primitives de concurrence

Il n'est pas vraiment connecté à d'autres fonctionnalités tmux, juste une implémentation pratique d'IPC.

wait-for event_namec'est comme attendre un événement wait-for -S event_name est un moyen de signaler un événement

Les options -Uet -Lsont en quelque sorte orthogonales et agissent comme des sémaphores

Répondre directement à votre question

Vous pouvez résoudre ces types de conditions de concurrence avec wait-formais uniquement si les commandes sont synchrones.

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

Le problème que vous avez ici est que la commande ssh n'est pas synchrone: vous ne pouvez pas dire quand elle est terminée.

En parcourant le manuel, nous pouvons trouver la LocalCommanddirective qui semble faire ce que nous voulons: exécuter une commande localement une fois la connexion terminée pour pouvoir appeler

ssh [email protected] -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'
Att Righ
la source
Donc, par "non connecté à d'autres fonctionnalités", vous voulez dire que channelc'est juste un nom dans son propre espace de noms et sans rapport avec les "événements" prédéfinis de tmux?
ormaaj
Il peut toujours y avoir un problème de course s'il wait-for -Sne garantit pas la livraison des messages et les sync-commandfinitions avant wait-for.
ormaaj