Come ottenere un terminale colorato su SSH?


53

Quando mi collego su SSH agli host remoti, tutto è solo un singolo carattere / colore. Vorrei avere colori come faccio localmente, ad esempio verde per eseguibile e blu per symlink ecc. E tale che quando eseguo $ git diff sull'host ssh mi mostra diff con colors =)


È un server Ubuntu a cui ti stai connettendo?
Stefano Palazzo

@ stefano-palazzo: a Debian.
Dima,

Risposte:


35

Dato che era xterm sul server, ho pensato che qualcosa non andava .bashrc

E senza dubbio! ls --color=autofunziona solo quando si è connessi a TTY. Cambiare tutto semplicemente --colornel .bashrcsull'host remoto e tutto è in bei colori ora.


42
Aiuterebbe molto questa risposta se dicessi dove metti --color = auto. .bashrc sul server? Quali comandi?
rfay

8
Dato che questa è una vecchia domanda che è ancora rilevante, volevo solo aggiungere che sui sistemi Ubuntu, il predefinito .bashrc ha un'istruzione case che definisce quali termini sono ammessi a colori. Se trovi la riga "case" $ TERM $ "in" nel tuo .bashrc, aggiungendo "xterm) color_prompt = yes ;;" abiliterà anche il colore. Inoltre puoi decommentare la riga "force_color_prompt = yes" per abilitarla sempre a livello globale.
Mike E,

2
è stato il commento di Mike E a risolverlo per me,
Frank Schrijver,

3
Non ho capito bene. Cosa significa "cambiare tutto in semplicemente --colore"? Posso vedere un esempio?
still_dreaming_1

1
State parlando dell'host locale, dell'host remoto o di entrambi?
Adam,

19

Questo ha funzionato per me:

ssh -t my_host my_command

-tera la chiave. Spiegato .


Funziona perfettamente ed è molto conveniente per le attività una tantum. Grazie!
XtraSimplicity il

Ho perso il colorize quando ho dato il su -comando nel prompt della connessione ssh
dubis,

10

Sembra che i colori siano già stati impostati ~/.bashrcper me e il problema è che ssh non usa il file bashrc. Puoi usare bashrc nella tua sessione ssh aggiungendo quanto segue a ~/.bash_profile:

if [ -f ~/.bashrc ]; then
      . ~/.bashrc
fi

1
Questo ha funzionato per me ed è stato un modo semplice ed efficace per farlo!
Flith,

7

Qual è il contenuto della tua variabile env XTERM sul server quando ti connetti ad esso?

~ > export | grep -i term
TERM=xterm

$ export | grep -i term declare -x TERM = "xterm"
Dima

4

Nel mio caso, la parte mancante doveva avere ls colorati, grep, ecc. Che possono essere aggiunti aggiungendo alias al file .bashrc:

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

eccetera.


2

Ho provato a modificare le ~./bashrcimpostazioni (sia sul server locale che remoto), ma non sembra funzionare.

Poi ho notato che ~/.bashrcil server remoto non viene nemmeno eseguito se mi connetto ad esso tramite SSH. Quindi ho creato ~/.bashrcun server remoto da eseguire inserendo if [ -f ~/.bashrc ]; then . ~/.bashrc fiil server remoto ~/.bash_profile. (basato su https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Quindi questa soluzione non ha richiesto la modifica ~/bashrcdiretta di alcun file ma ha richiesto la modifica del ~/bash_profilefile del server remoto in modo che il ~/bashrcfile del server remoto sia stato eseguito.


Ubuntu utilizza .profilee non .bash_profileper impostazione predefinita, e l'impostazione predefinita .profilefa sorgente .bashrc.
muru

È corretto. Ma .profileviene eseguito di default quando si accede tramite ssh?
chris544

Sì. Se non lo hai sovrascritto usando .bash_profile, bash viene eseguito .profilequando avviato come shell di accesso. E SSH inizia bash come shell di login.
muru,

È corretto che ~/.profilenon viene letto se ~/.bash_profileesiste. Ma non ~/.bash_profileesiste su Ubuntu per impostazione predefinita?
chris544

Vedi di nuovo il mio primo commento. No, non lo fa. Ubuntu usa .profile.
muru,

2

Dato che i colori hanno funzionato bene mentre sono stati collegati direttamente, ho semplicemente decommentato la linea force_color_prompt=yesnel file ~/.bashrc, che mi ha dato anche i colori su 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)


Sottoposta a votazione, questa sembra essere la soluzione più diretta.
snwflk,

1

Nella mia situazione, ho recentemente installato chef-locale mi ha chiesto di aggiungere una linea a .bash_profile. Quando eseguo l'accesso, .bashrcnon si carica più, perché ha visto .bash_profile.

Quello che ho fatto è stato aggiungere una riga in .bash_profile:

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

Sono uscito e rientrato e ho subito ricevuto il mio terminale colorato.


0

C'è un commento di "Mike E" sopra che conteneva la risposta per me, ma non è solo difficile da leggere, è un po 'difficile capire cosa significhi se non usi .bashrcmolto - e io non t.

Dopo aver rovinato un po ', ho ottenuto i risultati desiderati modificando le seguenti linee ~/.bashrcsulla macchina su cui stavo effettuando l'accesso con ssh:

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

per:

# 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

Sto pensando che avrei potuto aggiungere "| xterm" dopo "color" nella prima riga o scavato e capire perché ssh stava usando "xterm" invece di "xterm-color" e cambiarlo, ma questo funziona e io hanno altre cose da fare ora.


0

Stavo perdendo il mio colore durante la connessione tramite proxy perché TERM=dumbcosì l'ho risolto:

ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"

1
Dovresti allocare anche un terminale sulla prima connessione, se hai intenzione di farlo.
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.