Como posso alterar automaticamente as cores dos terminais quando ssh um servidor?

14

Frequentemente, estou entrando em servidores diferentes na janela do terminal os x.

Eu gostaria de atribuir um esquema de cores para diferentes hosts, para que minhas janelas de terminal sejam mais fáceis de distinguir. Isso pode ser feito automaticamente?


fonte

Respostas:

11

Aqui está uma solução completa. Mantenha uma lista dos endereços IP e / ou domínios de seus servidores e as cores desejadas para eles em ~ / .server_colors:

192.168.122.102, Areias Vermelhas
192.168.122.103, Oceano
www.foo.com, Grass
foo.com, grama

Em seguida, adicione esta linha a ~ / .profile para seqüestrar o comando ssh:

alias ssh = "~ / bin / safe_ssh $ 1"

Em seguida, compare o que estiver após o @ no seu destino ssh à sua lista. Se houver uma correspondência, execute um AppleScript para alterar a tela para a cor correspondente. Aqui está ~ / bin / safe_ssh:

#! / bin / bash
ip = `eco $ 1 | cut -d "@" -f2`
match = `cat ~ / .server_colors | grep $ ip | wc -l`
se [$ match -gt 0]
então
    color = `cat ~ / .server_colors | grep $ ip | corte -f2 -d "," `
    osascript ~ / bin / change_terminal_color.scpt "$ color" 2> / dev / null
fi
/ usr / bin / ssh $ 1

E por último, aqui está ~ / bin / change_terminal_color.scpt

em execução argv
    informe ao aplicativo "Terminal" para definir as configurações atuais da guia selecionada da janela 1 como (primeiro conjunto de configurações cujo nome é (item 1 de argv))
corrida final

Tirei a maior parte desse código desta postagem do blog .

muirbot
fonte
1
Muito agradável. No script safe_ssh, o $ 1 deve ser $ @ para permitir a passagem de parâmetros extras ao SSH. Talvez também uma chamada após ssh para retornar o terminal ao padrão. Uma última edição tornaria isso praticamente perfeito: suporte para comandos SSH que não contêm '@'.
NOw2 31/08
2

A solução do @muirbot funciona muito bem para mim. Fiz algumas pequenas melhorias nisso. Vou adicioná-lo abaixo de seu post quando tiver reputação suficiente.

Substitua a linha

ip =echo $1 | cut -d"@" -f2
com
ip =echo $@ | grep -Eio [[:alnum:]_.-]+@[[:alnum:]_.-]+ | cut -d@ -f2

Essa alteração permite fornecer argumentos adicionais ao seu comando ssh como "ssh -p 1111 userName @ host"

A expressão regular permite endereços IPv4 simples e nomes de domínio.

Para dar suporte a vários argumentos, altere a última linha para

/ usr / bin / ssh $ @

Vincent Nikkelen
fonte
0

Eu estava apenas procurando a mesma coisa e encontrei este artigo:

http://akrabat.com/php/osx-terminal-colours/

Ele usa um script php para alterar as cores do terminal por maçãs. Você pode configurar mapeamentos de cores diferentes para cada servidor. Funciona muito bem para mim, embora sinta vontade de reescrever o material php em ruby ​​:)

fk

effkay
fonte
0

Eu uso um script que inicia o SSH em janelas xterm com diferentes cores bg / fg. Ele seleciona as cores com base no hash do nome do host em um intervalo de cores, para que nenhuma configuração seja necessária.

O script está escrito em Ruby: https://github.com/mickeyil/ssx

miluz
fonte
0

Se você estiver usando o iTerm2, crie um arquivo nomeado ~/bin/ssh-host-color.shcom o conteúdo de https://gist.github.com/jbochi/31f118b8ae2882a2c90fa46c46509b57 :

set_term_bgcolor(){
  local R=$1
  local G=$2
  local B=$3
  /usr/bin/osascript <<EOF
tell application "iTerm"
  tell the current window
    tell the current session
      set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))}
    end tell
  end tell
end tell
EOF
}

if [[ "$@" =~ "production.example.com" ]]; then
  set_term_bgcolor 40 0 0
elif [[ "$@" =~ "qa.example.com" ]]; then
  set_term_bgcolor 0 40 0
fi

trap "set_term_bgcolor 0 0 0" EXIT

ssh $@

E adicione a seguinte linha ao seu ~/.aliases.sharquivo:

alias ssh="~/bin/ssh-host-color.sh $@"
jbochi
fonte