Cor diferente solicita máquinas diferentes ao usar terminal / ssh?

11

Eu tenho 5 máquinas nas quais eu constantemente ssh para fazer o trabalho. Está ficando cada vez mais frustrante quando estou emitindo comandos errados nas caixas erradas. Felizmente ainda não fiz nada de ruim. Eu queria saber se existe algum hack que eu possa codificar, que exibirá meu prompt em cores diferentes, com base na máquina em que estou usando o ssh? Como azul para desktop1, roxo para laptop, vermelho para servidor etc? Isso é possível?

Atualmente, estou usando este comando export PS1 = "\ e [0; 31m [\ u @ \ h \ W] \ $ \ e [m" retirado daqui http://www.cyberciti.biz/faq/bash-shell -change-the-color-of-my-shell-prompt-under-linux-ou-unix / mas obviamente não funciona no ssh.

Além disso, se você tiver outras dicas legais do bash para me ajudar a facilitar minha visão, será maravilhoso. Eu recebi essa dica que colore as páginas de manual.

http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/

bcrawl
fonte
1
A linha name@ ** server** antes de cada comando não transmite em que servidor você está? Leva algum tempo para se acostumar, mas é a melhor maneira existente
TheLQ
Em que sistema operacional seu laptop está trabalhando?
SamK 11/01
1
O name @ server é particularmente inútil ao usar coisas como a nuvem da Amazon, porque altera cada inicialização e não transmite o objetivo da caixa ou um nome facilmente memorável (usuário @ ip-xxxx). Então +1 para esta pergunta :)
Rafiq Maniar

Respostas:

11

O método que eu uso é gerar uma cor para o nome do host a partir do nome do host. Não há muitas cores para escolher, portanto isso gerará conflitos facilmente, mas é útil para a pequena quantidade de máquinas que eu gerencio.

hostnamecolor=$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\[\e[${hostnamecolor}m\]\]\h \[\e[32m\]\w\[\e[0m\]\n$ '

A primeira linha gera um número entre 30 (inc) e 36 (exc) a partir do nome do host da máquina. A segunda linha o aplica ao prompt com nome de usuário e caminho em verde (32) e o nome do host na cor gerada.

Nenhuma cor de plano de fundo está definida e excluo ciano (36) e branco (37) do primeiro plano para evitar conflitos com o plano de fundo dos terminais que eu uso.

Dan Midwood
fonte
Para que ele possa gerar a mesma cor para o primeiro e o segundo plano?
Chris S
Nenhuma cor de fundo é gerada. Mas você está certo de que a cor gerada pode corresponder ao fundo. Excluo branco (37) e ciano (36) porque eles não funcionam bem com os fundos de terminal que eu uso. Eu editei a resposta para deixar isso claro.
quer
3

Você está no caminho certo. Usei o método detalhado na página para a qual você vincula e detalhou exatamente como no meu blog . Funciona para mim usando o PuTTY de uma caixa do Windows e também o SSH de um servidor CentOS para outro. Se não estiver funcionando para você e você tiver certeza de que a sintaxe está correta, pode ser por causa do seu cliente SSH.

dunxd
fonte
Olá, mudei o .bashrc e compreendo que posso alterar as cores localmente. O que eu queria era que, quando ssh para um computador diferente, a cor do prompt mudasse. Eu sei que o terminal não saberá automaticamente, então estava procurando por ponteiros para que isso acontecesse.
bcrawl
1
Edit: ok, sim, você está certo. Se o arquivo .bashrc for alterado em cada computador, quando você fizer o ssh, ele exibirá as cores configuradas. Eu não estava editando o arquivo certo. Obrigado. Considere resolvido.
bcrawl
2
Se essa resposta o levou diretamente à solução, considere marcá-la como Resposta Aceita clicando no contorno de uma marca de seleção à esquerda da resposta.
Kevin M
1

No meu trabalho, temos diferentes estágios de servidores

desenvolvimento de produção

Eu uso um prompt vermelho como prod e verde para a preparação. Agora, todas as máquinas de teste têm stg no domínio.

Então prod seria

web1.domain.com
web2.domain.com

Estadiamento / Dev seria

stg-web1.domain.com
stg-web2.domain.com
dev-web1.domain.com
etc

Isso realmente funcionará apenas para redhat / centos

Mas para servidores prod, tenho o seguinte em

/etc/sysconfig/bash-prompt-xterm

Dentro é

export PS1="\[[\e[1;31m\]\u@\[\e[1;31m\]\h\[\e[0m\] \W] "

Isso tornará o prompt vermelho. Agora você não pode tocar em / etc / bashrc e todas as outras máquinas que não são de prod permanecerão com a cor normal de primeiro plano usada .. mas eu as deixei verdes

if [ "$PS1" ]; then
    case $TERM in
        xterm*)
                if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
                        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
                else
                        PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
                fi
                ;;

Que se o bloco deveria estar lá .. Acabei de mudar a cor da outra parte para ser verde .. 33 é verde

Mike
fonte
0

Você pode alterar o bash.rc em cada máquina para fornecer cores de prompt diferentes. Ou, se você tiver privilégios suficientes, altere a configuração do sshd para permitir a transferência do ambiente do usuário por meio da PermitUserEnvironmentdiretiva.

teísta
fonte
0

Estamos trabalhando em uma solução mais abrangente baseada em soma de verificação de string de nome de host nesta lista essencial . 256 compatibilidade de cores. Além do caso em que você está realmente interessado em determinar uma cor específica para cada um dos seus servidores, sinto que esse é um daqueles "é o que temos computadores" para problemas, para obter cores "aleatórias" determinadas para você com base em as somas de verificação devem ser uma boa abordagem.

lkraav
fonte