Como obter terminal colorido sobre ssh?

53

Quando eu conecto o ssh a hosts remotos, tudo é apenas uma única fonte / cor. Eu gostaria de ter cores como localmente, por exemplo, verde para executável e azul para links simbólicos etc. E assim, quando executo $ git diff no host ssh, ele mostra diff com colors =)

Dima
fonte
É um servidor Ubuntu ao qual você está se conectando?
Stefano Palazzo
@ stefano-palazzo: para o Debian.
Dima

Respostas:

35

Por ser o xterm no servidor, achei que havia algo errado com .bashrc

E realmente! ls --color=autofunciona apenas quando você está conectado ao TTY. Mudando tudo simplesmente --colorem .bashrcno host remoto e tudo está em cores bonitas agora.

Dima
fonte
42
Ajudaria muito esta resposta se você dissesse onde coloca --color = auto. .bashrc no servidor? Quais comandos?
Rfay
8
Como essa é uma pergunta antiga que ainda é relevante, eu só queria acrescentar que, nos sistemas Ubuntu, o .bashrc padrão possui uma declaração de caso que define quais termos têm cores permitidas. Se você encontrar a linha "case" $ TERM $ "in" no seu .bashrc, adicionando "xterm) color_prompt = yes ;;" também habilitará cores. Além disso, você pode descomentar a linha "force_color_prompt = yes" para ativá-la globalmente sempre.
Mike E
2
foi o comentário de Mike E que o corrigiu para mim,
Frank Schrijver
3
Estou confuso. O que significa "mudar tudo para simplesmente - cor"? Posso ver um exemplo?
still_dreaming_1
11
Vocês estão falando sobre o host local, o host remoto ou ambos?
Adam
19

Isso funcionou para mim:

ssh -t my_host my_command

-tfoi a chave. Explicado .

juanpastas
fonte
Isso funciona perfeitamente e é muito conveniente para tarefas pontuais. Obrigado!
XtraSimplicity
Perdi a cor quando comandei su -no prompt de conexão ssh
dubis 20/02
10

Parece que as cores já foram definidas ~/.bashrcpara mim e o problema é que o ssh não usa o arquivo bashrc. Você pode usar o bashrc na sua sessão ssh adicionando o seguinte a ~/.bash_profile:

if [ -f ~/.bashrc ]; then
      . ~/.bashrc
fi
dariusz gorczynski
fonte
11
Isso funcionou para mim e foi uma maneira simples e eficiente de fazer isso!
Flith
7

Qual é o conteúdo da sua variável de ambiente XTERM no servidor quando você se conecta a ela?

~ > export | grep -i term
TERM=xterm
Vedran Krivokuća
fonte
$ exportação | grep -i term declara -x TERM = "xterm"
Dima
4

No meu caso, a parte que faltava era ter ls, grep etc. coloridos, que podem ser adicionados adicionando aliases ao arquivo .bashrc:

alias ls='ls --color=auto'
alias grep='grep --color=auto'

etc.

Stuart Clark
fonte
2

Tentei alterar as ~./bashrcconfigurações (no servidor local e remoto), mas não parecia funcionar.

Então notei que ~/.bashrco servidor remoto nem mesmo é executado se eu conectar a ele através do ssh. Então eu criei um servidor remoto~/.bashrc para executar colocando if [ -f ~/.bashrc ]; then . ~/.bashrc fiem servidores remotos ~/.bash_profile. (com base em https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Portanto, essa solução não exigiu a alteração ~/bashrcdireta de nenhum arquivo, mas a alteração do ~/bash_profilearquivo do servidor remoto para que o ~/bashrcarquivo do servidor remoto fosse executado.

chris544
fonte
O Ubuntu usa .profilee não .bash_profilepor padrão, e o padrão .profileé fonte .bashrc.
Muru
Está correto. Mas é .profileexecutado por padrão ao efetuar login através do ssh?
precisa saber é o seguinte
Sim. Desde que você não o substitua usando .bash_profile, o bash é executado .profilequando iniciado como um shell de login. E o SSH inicia o bash como um shell de login.
Muru
É correto que ~/.profilenão seja lido se ~/.bash_profileexistir. Mas não ~/.bash_profileexiste no Ubuntu por padrão?
precisa saber é o seguinte
Veja meu primeiro comentário novamente. Não, não faz. O Ubuntu usa .profile.
Muru
2

Como as cores funcionaram bem enquanto efetuavam login diretamente, apenas descomentei a linha force_color_prompt=yesdo arquivo ~/.bashrc, o que também me deu cores sobre ssh:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

(Ubuntu 18.04 LTS)

hinneLinks
fonte
Promovido, esta parece ser a solução mais direta.
snwflk 25/04
1

Na minha situação, eu instalei recentemente chef-locale ele me pediu para adicionar uma linha ao .bash_profile. Quando inicio sessão, .bashrcnunca carrega mais, porque viu .bash_profile.

O que fiz foi adicionar uma linha em .bash_profile:

source .bashrc
export PATH="/opt/chefdk/embedded/bin:$PATH"

Eu saí e voltei e peguei meu terminal colorido imediatamente.

Kevin
fonte
0

Há um comentário de "Mike E" acima que continha a resposta para mim, mas não é apenas difícil de ler, é meio difícil descobrir o que ele quer dizer se você não usa .bashrcmuito - e eu não ' t.

Depois de me mexer um pouco, obtive os resultados desejados alterando as seguintes linhas na ~/.bashrcmáquina na qual estava efetuando login com o ssh:

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

para:

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
    xterm) color_prompt=yes;;
esac

Eu estou pensando que eu poderia ter adicionado "| xterm" após "color" na primeira linha, ou procurado e descoberto por que o ssh estava usando "xterm" em vez de "xterm-color" e mudado isso, mas isso funciona e eu tem outras coisas para fazer agora.

Mike Wise
fonte
0

Eu estava perdendo a cor ao me conectar via proxy porque TERM=dumba corrigi:

ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"
ErichBSchulz
fonte
11
Você também deve alocar um terminal na primeira conexão, se quiser fazer isso.
muru