Como eu posso alterar a aparência do terminal (Linux) quando eu faço o SSH em uma máquina remota?

4

Às vezes, encontro-me com vários terminais abertos, alguns dos quais são introduzidos em outras máquinas (de produção). Se eu executar um comando como "descartar todas as tabelas no banco de dados" em um desses terminais ssh-ed, posso destruir potencialmente muitos dados do cliente. Mas no desenvolvimento, claro, eu preciso executar esses comandos de tempos em tempos.

Então, eu queria saber: existe uma maneira de eu conseguir meu terminal (idealmente o GNOME integrado, mas eu estaria disposto a mudar para um programa de terminal diferente se necessário) para mudar sua aparência visual quando eu estou ssh-ed em uma máquina remota? Idealmente, eu teria meu fundo preto normal, mas quando eu ssh para uma máquina remota, o fundo mudaria para vermelho. Talvez as bordas da janela mudassem de vermelho e começassem a piscar ou algo do tipo também.

Os detalhes da mudança de aparência não são importantes: o importante é tornar instantaneamente óbvio que preciso ser mais cuidadoso ao trabalhar em um terminal que esteja ssh-ed em algum lugar. Isso é possível?

P.S. Eu encontrei o SSH contextual , que é exatamente o que eu quero ... exceto que é apenas para Mac: - (

    
por machineghost 15.05.2013 / 22:30

3 respostas

6

Eu sugeriria configurar seu $ PS1 para informações relevantes, como nome do host, etc. Você pode verificar a página do manual de sua shell of choice para detalhes.

Um exemplo de coisas que você poderia fazer no seu PS1 em bash

Eu mesmo tenho um teste no meu ~ / .subbash / prompt que define o prompt de cor baseada no servidor. *

* veja a função __prompt_command ()

Maneiras Você pode mudar seu PS1

Existem várias maneiras de personalizar o PS1. Parece que você quer algo um pouco mais perceptível, então meus exemplos serão um pouco mais complicados do que adicionar o \H ao PS1. Para usar qualquer um dos itens a seguir, você pode adicioná-los ao seu ~/.bashrc (nos servidores remotos, se não ambos. Eu sincronizo o mesmo conf entre todos os meus computadores)

Observação: Para torná-los mais legíveis, o seguinte pressupõe que essas vars sejam declaradas.
O var pode ser facilmente substituído pelo conteúdo.
Além disso, esses exemplos são tendenciosos, você pode precisar ajustar para outros shells.

RCol='\[\e[0m\]'    # Text Reset
Red='\[\e[0;31m\]'  # Red
Gre='\[\e[0;32m\]'  # Green
Yel='\[\e[0;33m\]'  # Yellow
Blu='\[\e[0;34m\]'  # Blue
Pur='\[\e[0;35m\]'  # Purple
Cya='\[\e[0;36m\]'  # Cyan
Whi='\[\e[0;37m\]'  # White

Verificação de raiz

Uma coisa que você pode gostar é testar o $ USER, pois se for root, ou talvez uma única conta de 'produção':

if [ $UID -eq "0" ];then
    PS1="${Red}\h \W ->${RCol} "        # Set prompt for root
else
    PS1="\h \W -> "
fi

Isso tornaria o prompt vermelho se você estivesse no root.

Verificação de host

Você também pode testar informações sobre a máquina atual e definir cores com base nisso:

PS1=
PSCol=
if [ $HOSTNAME == 'moving-computer-of-doom' ]; then
    PSCol="$Cya"                # For Main Computer
elif [ $HOSTTYPE == 'arm' ]; then
    PSCol="$Gre"                # For pi
elif [ $HOSTNAME == 'ma.sdf.org' ]; then
    PSCol="$Blu"                # For MetaArray
elif [[ $MACHTYPE =~ arm-apple-darwin ]]; then
    PSCol="$Gre"                # For iOS
elif [ $MACHTYPE == 'i486-pc-linux-gnu' ]; then
    PSCol="$Whi"                # For Netbook
elif [[ "$MACHTYPE" == "x86_64--netbsd" && "$OSTYPE" == "netbsd" ]]; then
    PSCol="$Yel"                # For Main Cluster
else
    PS1+="\h "              # Un-designated catch-all
fi

PS1+="${PSCol}\W ->${RCol} "

Isso definiria o prompt ciano se no meu laptop, verde para o meu pi ou iOS, etc etc.
Se não fosse listado, ele adicionaria o nome do host ao prompt.
Então, se seus servidores de produção tivessem algo fácil de testar (como um nome de host similar, você poderia usar isso)

PROMPT_COMMAND

Na maioria das vezes, o acima funcionaria bem sem isso.
Se você começar a adicionar coisas que você gostaria de reavaliar com mais freqüência o login (talvez git status de um dir), você poderia usar uma função PROMPT_COMMAND para ter o PS1 avaliado após cada comando.

O Above funciona bem sem isso.

Observação: desculpem se isso parecer confuso, eles são retirados das configurações que eu uso e modificados para funcionar sem o resto das minhas configurações.

    
por 15.05.2013 / 22:44
3

Este é um ótimo artigo que usei para personalizar meu prompt bash:

link

Facilita a visualização quando estou conectado ao meu servidor, pois defini a parte do nome do host do meu prompt como vermelho.

O valor que eu uso como meu PS1 no bash_profile é:

PS1="[\ e [32; 1m] \ u [\ e [0m] [\ e [34; 1m] @ [\ e [0m] [\ e [31; 1m] \ h \ \ \ [0m]: [\ e [34; 1m] \ w $ [\ e [0m] "

Isso me dá um nome de usuário em verde, seguido por um sinal azul "@", depois o nome do host está em vermelho e, em seguida, "~ $" em azul. Provavelmente, você pode ver como é fácil personalizá-lo para ajudá-lo a ver facilmente quando você está conectado a diferentes servidores

Certifique-se de ler o artigo corretamente, pois ele explica como escapar de cada sequência corretamente. Deixar de escapar das sequências pode causar algum comportamento imprevisível ao digitar comandos mais longos.

    
por 15.05.2013 / 22:51
1

Aparentemente, todas as respostas anteriores funcionam apenas com o Bash. Eu uso o Busybox em alguns dispositivos e por isso precisava de uma alternativa.

De acordo com este você pode adicionar uma linha genérica ao seu script de login que deve funcionar (e fez para mim em vários hosts variados):

echo -n "3]0;${USER}@${HOSTNAME}: ${PWD}
echo -n "3]0;${USER}@${HOSTNAME}: ${PWD}%pre%7"
7"
    
por 10.12.2013 / 20:08

Tags