Niech tmux zaczeka na I SSH, aby ukończyć resztę skryptu Tmuxinator


13

Po niedawnym odkryciu tmux i Tmuxinator starałem się skonfigurować środowisko programistyczne do użycia.

Zgodnie z protokołem nie wolno nam przechowywać haseł / haseł w skryptach. Tak więc szukam oczekiwania na tmux, aby tunel SSH został skonfigurowany (hasło dostarczone, wciśnięty i zalogowany).

Wiem, że w tmux 1.8+ istnieje polecenie „czekaj”. Używam 1.9a przez Cygwin. Ale mimo że przeczytałem dokumentację, po prostu trudno mi ją zrozumieć.

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

Oto bardzo prosta wersja tego, co mam.

Myśli? Wiem, że mogę synchronizować sesje, wciąż pracuję nad tym.

Edycja : wyszukiwanie poleceń i przeciąganie zmiennych z panelu do polecenia z paneli zsynchronizowanych. To może być „lepszy” sposób na obejście, dopóki nie wymyślę, jak zmusić TMUX, aby poprosił mnie o podanie danych przez użytkownika.

Może pojawić się żądanie funkcji.


2
Dlaczego nie łączysz się bez hasła i nie używasz klucza publicznego / prywatnego?
YoMismo,

Powiedziano mi, że nie mogę połączyć się w ten sposób. Chociaż technicznie mógłbym , nie jest to możliwe do zaakceptowania z wprowadzonymi zasadami. Nie mam też głosu / uprawnień, aby dokonać tej zmiany (szybko?). W moim przypadku badanie dróg najmniejszego oporu wydaje się obiecujące.
Tango Bravo

1
Rozumiem, że zdalne pudełko nie ma zainstalowanego Tmuxa? W przeciwnym razie znacznie lepiej byłoby ssh w zdalnym urządzeniu i dopiero wtedy uruchomić tmux. // Również ja sugerujemy skorzystać z twojego ~/.ssh/configpliku: put Host foo, User usera Hostname example.comna trzech kolejnych linii w pliku konfiguracyjnym. Następnie ssh foostaje się równoważne z ssh user@example.com. // Może coś takiego też pomaga:command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
damien

Odpowiedzi:


3

Niektóre notatki z wait-for

Zatem podstawowe użycie funkcji oczekiwania na nie jest zbyt skomplikowane, jeśli uważasz ją za analogiczną do operacji podstawowych współbieżności wątków

To nie jest tak naprawdę związane z innymi funkcjami tmux, tylko wygodna implementacja IPC.

wait-for event_nameto jak czekanie na zdarzenie, wait-for -S event_name to sposób na zasygnalizowanie zdarzenia

-UI -Lopcje są rodzajem prostopadłe i zachowywać się jak semafory

Odpowiedzi na twoje pytanie bezpośrednio

Możesz rozwiązać ten rodzaj warunków wyścigu, wait-forale tylko wtedy, gdy polecenia są synchroniczne.

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

Problem, który tu masz, polega na tym, że polecenie ssh nie jest synchroniczne: nie wiesz, kiedy się zakończyło.

Przeglądając instrukcję , możemy znaleźć LocalCommanddyrektywę, która wydaje się robić to, co chcemy: uruchomić polecenie lokalnie po zakończeniu połączenia, abyśmy mogli wywołać

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

Czyli przez „niezwiązany z innymi funkcjami” masz na myśli, że channeljest to tylko nazwa w jej własnej przestrzeni nazw i niezwiązana ze wstępnie zdefiniowanymi „zdarzeniami” tmux?
ormaaj,

Nadal może występować problem z wyścigiem, jeśli wait-for -Snie gwarantuje dostarczenia wiadomości i sync-commandukończenia wcześniej wait-for.
ormaaj,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.