Questão Como posso alterar a aparência do meu terminal (Linux) quando eu o SSH para uma máquina remota?


Eu às vezes me encontro com vários terminais abertos, alguns dos quais são enviados para 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 que eu possa obter o meu terminal (idealmente o built-in do GNOME, mas eu estaria disposto a mudar para um programa de terminal diferente, se necessário) para alterar 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 assim também.

Poré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 SSH contextual, o que é exatamente o que eu quero ... exceto que é apenas para Mac :-(


4


origem


A resposta aceita não apresenta uma aparência diferente com base no SSH. Para isso, você precisa alterar algo com base no clima, a sessão atual é uma sessão SSH, cuja detecção é descrita aqui: askubuntu.com/a/538455 - ShadSterling


Respostas:


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

Um exemplo de coisas que você poderia fazer para o seu PS1 em festança

Eu mesmo tenho um teste no meu ~ / .subbash /pronto que define a cor do prompt com base no servidor. *

* consulte 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 \H para o 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)

Nota: Para torná-las 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 bash tendenciosos, você pode ter que 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.

Cheque 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 os seus servidores de produção tivessem algo fácil de testar (como um nome de host similar, você poderia usar isso)

PROMPT_COMMAND

Na maior parte 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.

Nota: Desculpe se estes parecem confusos, estes são retirados das configurações que eu uso e modificado para funcionar sem o resto das minhas configurações.


6



Obrigado, mas mesmo se depois de ler sua resposta (e os dois links que você forneceu) eu ainda não entendi como eu mudo $ PS1 em resposta a um ssh (e depois mudo de volta quando eu deixar o servidor remoto). Alguma chance de você explicar isso? - machineghost
@machineghost faz o exemplo de ajuda? Alguma coisa deveria ser explicada mais? - demure
Isso foi perfeito, muito obrigado :-) - machineghost
Possivelmente uma pergunta boba, mas eu estou supondo que as instruções acima só funcionem se você tiver certeza de copiar o seu .bashrc para o host remoto? Isso é verdade? Eu adoraria que não fosse. : P - Josh Gagnon
@JoshGagnon Sim, um $ PS1 (como outros envovars), são apenas locais. Eu pessoalmente uso um repositório git para manter meus arquivos de ponto em um lugar, e os coloco em todas as máquinas que eu preciso também. gitorious.org/demure/dotfiles - demure


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

http://www.ibm.com/developerworks/linux/library/l-tip-prompt/

Torna mais fácil ver quando estou logado no meu servidor, já que configurei a parte do nome do host do meu prompt como vermelho.

O valor que uso como meu PS1 no bash_profile é:

PS1 = "[\ e [32; 1m] \ u [\ e [0m] [\ e [34; 1m] @ [\ e [0m] [\ e [31; 1m] \ h [\ e [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 azul. Provavelmente, você pode ver como é fácil personalizar para ajudá-lo a ver facilmente quando você está conectado a diferentes servidores

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


3



Obrigado, isso explica totalmente como alterar o prompt do bash. Infelizmente, no entanto, isso não explica como alterar o prompt do bash em resposta a mim executando "ssh" (e depois alterá-lo quando terminar). - machineghost


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

De acordo com esta 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 "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"

1