Se eu ssh em um servidor remoto do tmux em um único painel, é possível alterar a cor de fundo do painel com base no nome do servidor?
Digamos que todos os meus servidores prod comecem com prod_XYZ
e um servidor dev comece com dev_XYZ.
Se eu ssh nesses dois servidores, posso colori-los de maneira diferente com base no tipo de servidor em que estou? Ou seja, com base no prefixo do servidor?
Sim.
A solução básica requer um wrapper para
ssh
(pode ser uma função shell ou um script), além de um script auxiliar adicional.A função wrapper deve ser assim:
E este é o script auxiliar:
Salve o script onde
$helper
a função aponta para ($HOME/bin/_ssh_tmux_background
no meu código), torne-o executável.Agora, se você invocar
ssh
, a função executará ossh
comando real com duas opções adicionais:PermitLocalCommand
eLocalCommand
(consulte osman 5 ssh_config
detalhes). Dessa forma, você executará o script auxiliar com o nome do host remoto como único argumento assim que fizer login no host remoto.Se você estiver em
tmux
, o script herdará aTMUX_PANE
variável de ambiente. O script sairá imediatamente se estiver fora detmux
, portanto, não deve interferir mesmo se você usar a função semtmux
.O script compara o nome do host remoto com seus prefixos e escolhe o estilo desejado para
tmux
. Você não está limitado acase
, você pode construir sua lógica da maneira que quiser (incluindo correspondência de regex com[[
, mas você precisabash
, então, alterar o shebang). No final, o estilo é aplicado.Após
ssh
sair, a função chama o script sem argumentos."$1"
avalia para uma string vazia que não corresponde a nenhum dos nossos padrões, então o estilo padrão dedefault
é passado paratmux
.Observe que você pode especificar
PermitLocalCommand
eLocalCommand
em/etc/ssh/ssh_config
ou em~/.ssh/config
. Porém, você não pode se livrar do wrapper tão facilmente, porque precisa alterar a cor de fundo novamente apósssh
sair.Ainda assim, uma solução sem invólucro pode ser desejada. Imagine um script (chamado com
LocalCommand
) que recupere ossh
PID de seu pai ( 's), bifurca-se para o segundo plano (entãossh
continua), monitora o PID e restaura astmux
configurações após asssh
saídas. Esse script pode salvar o estilo original do painel, não importa qual seja, e restaurá-lo posteriormente, em vez de usar odefault
estilo.Vamos fazer isso. Esta é a minha tentativa:
O novo script (digamos
$HOME/bin/_ssh_tmux_style
) também deve ser executável. Usatail --pid
o que não é portátil; veja esta questão para abordagens alternativas.Agora não precisamos da antiga função wrapper (portanto, inicie um novo shell ou
unset -f ssh
). Tudo o que precisamos é~/.ssh/config
. Lembre -seman 5 ssh_config
disse:Tendo isso em mente, coloque o seguinte no lugar certo em seu
~/.ssh/config
:As aspas duplas são importantes. Observe que toda a configuração adicional (estilos) agora está incorporada na configuração do
ssh
. Faça o seu$PATH
conteudo$HOME/bin
que depois fica melhor ainda:Acho bem elegante.