Faça com que o tmux aguarde até que eu faça o SSH para concluir o restante do script do Tmuxinator


13

Depois de descobrir recentemente o tmux e o Tmuxinator, tentei configurar um ambiente de desenvolvimento para usar.

Por protocolo, não temos permissão para armazenar senhas / frases secretas em scripts. Então, o que eu estou procurando é uma espera para o tmux aguardar a configuração do túnel SSH (senha fornecida, pressione Enter e faça login).

Eu sei que há um comando "espera por" no tmux 1.8+. Estou executando o 1.9a via Cygwin. Mas mesmo que eu tenha lido a documentação, estou tendo dificuldades para entendê-la.

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

Então, aqui está uma versão muito simples do que eu tenho.

Pensamentos? Eu sei que posso sincronizar sessões, mas ainda estou trabalhando nisso.

Editar : Examinar comandos e puxar variáveis ​​do painel para o comando dos painéis sincronizados. Essa pode ser uma maneira "melhor", até que eu possa descobrir como fazer com que o TMUX me solicite a entrada do usuário.

Pode emitir uma solicitação de recurso.


2
Por que você não se conecta sem a senha e usa a chave pública / privada?
YoMismo 15/07/2014

Foi-me dito que eu não poderia conectar dessa maneira. Embora eu tecnicamente pudesse , não é aceitável com as políticas implementadas. Também não tenho voz / autoridade para fazer essa alteração (rapidamente?). Portanto, no meu caso, ao examinar as estradas de menor resistência, isso parece ter promessas.
Tango Bravo

1
Presumo que a caixa remota não possui o tmux instalado? Caso contrário, seria muito melhor colocar ssh na caixa remota e só então iniciar o tmux. // Além disso, eu sugiro que você faça uso do seu ~/.ssh/configarquivo: put Host foo, User usere Hostname example.comem três linhas consecutivas no arquivo de configuração. Então ssh foose torna equivalente a ssh user@example.com. // Talvez algo assim ajude também: #command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
damien

Respostas:


3

Algumas notas de wait-for

Portanto, o uso básico de espera não é muito complicado se você pensar nisso como análogo a segmentar primitivas de simultaneidade

Não está realmente conectado a outras funcionalidades do tmux, apenas uma implementação conveniente do IPC.

wait-for event_nameé como esperar por um evento wait-for -S event_name é um meio de sinalizar um evento

As opções -Ue -Lsão ortogonais e agem como semáforos

Dirigindo sua pergunta diretamente

Você pode resolver esses tipos de condição de corrida com wait-formas apenas se os comandos forem síncronos.

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

O problema que você tem aqui é que o comando ssh não é síncrono: você não pode dizer quando ele terminou.

Examinando o manual , podemos encontrar a LocalCommanddiretiva que parece fazer o que queremos: execute um comando localmente depois que a conexão terminar, para que possamos chamar

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

Então, por "não conectado a outra funcionalidade", você quer dizer que channelé apenas um nome em seu próprio espaço de nome e não relacionado aos "eventos" predefinidos do tmux?
Ormaaj 11/08/19

Ainda pode haver um problema de corrida se wait-for -Snão garantir a entrega da mensagem e os sync-commandacabamentos anteriores wait-for.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.