Como alterar automaticamente o plano de fundo do terminal, com base no nome do host ssh?


9

Como é possível alterar progressivamente a cor de plano de fundo de uma janela de terminal, com base no nome do host no qual você ssh?

ou seja, quando estou em sistemas embarcados ativos no hardware de produção, desejo que o plano de fundo do terminal mude para vermelho - para "manter a consciência" de qual servidor estou. Ter apenas o nome do host no PS1 nem sempre é suficiente.

Estou usando o gnome-terminal, mas aceitaria qualquer solução viável no Linux.

Respostas:


7

Você pode usar o ssh LocalCommand para emitir a sequência de escape ANSI para alterar a cor do plano de fundo e ter uma seção por host (ou padrão de host) para selecionar a cor apropriada que deseja corresponder ao host remoto.

Se seus servidores de produção seguem uma convenção de nomenclatura como "começa com prod", você pode tentar o seguinte trecho no seu arquivo ~ / .ssh / config: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

Se não houver uma convenção de nomenclatura útil para usar padrões curinga, basta listar os nomes de host separados por espaços. Você pode criar blocos Host adicionais com diferentes valores de cores e cadeias de caracteres para vários outros servidores que não são de produção.

Após conectar-se a um host que corresponde ao padrão, a impressão correspondente será executada localmente, alterando a cor de fundo para vermelho (a [41m escolhe vermelho como cor de fundo, a parte [2J repintará a tela inteira com a cor de fundo atualizada. Consulte https://en.wikipedia.org/wiki/ANSI_escape_code para muito mais opções)

O maior incômodo sobre essa abordagem é que a cor do plano de fundo persiste na saída da sessão ssh; Não há contrapartida no LocalCommand para ser executada na desconexão (que eu saiba). Um alias ou script de invólucro de shell para ssh pode chamar printf "\x1b[0m"como uma redefinição. Por outro lado, definir a cor de plano de fundo via LocalCommand significa que você obterá a cor definida, mesmo que o ssh não seja executado por meio de um script ou alias de wrapper.


Excelente resposta! O único problema que estou vendo, porém significativo, é que a mudança de cor permanece apenas na primeira "tela". Assim que os comandos são inseridos, e a tela rola para cima, passa de vermelho para preto. Talvez o controle de cores do terminal gnome esteja substituindo a sequência de escape ANSI? Você conhece uma solução alternativa?
precisa

É possível fazer algo semelhante, talvez a variável de prompt PS1 no host SSH?
Mtl Dev

A redefinição pode ser causada por sequências na variável de prompt da PS1 ou se você tiver comandos como o lsalias ls --color=autoe inclui a sequência de redefinição '<ESC> [0m'. Para persistir, você provavelmente precisaria configurar diferentes perfis do terminal gnome e seguir a rota de script do wrapper, selecionando um nome de perfil com base no nome do host e invocando gnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

Você está exatamente certo: se eu tiver ls --colourOU a sequência de redefinição no PS1, qualquer uma delas substituirá as configurações de cores ansi anteriores. Então, analisarei a implementação da sua solução de script de wrapper proposta, o que também é uma excelente idéia! Merci beaucoup!
Mtl Dev

Apenas os outros sabem: adicionar printf a ~ / .ssh / config parece quebrar o rsync. Detalhes relacionados aqui: serverfault.com/questions/267154/…
Mtl Dev
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.