Comment obtenir un terminal de couleur sur ssh?

53

Lorsque je me connecte via ssh à des hôtes distants, tout n’est qu’une seule police / couleur. Je voudrais avoir des couleurs comme je le fais localement, par exemple vert pour les exécutables et bleu pour les liens symboliques, etc.

Dima
la source
Est-ce un serveur Ubuntu auquel vous vous connectez?
Stefano Palazzo
@ Stefano-Palazzo: à Debian.
Dima

Réponses:

35

Parce que c'était xterm sur le serveur, j'ai pensé que quelque chose n'allait pas .bashrc

Et en effet! ls --color=autone fonctionne que lorsque vous êtes connecté à TTY. Changer tout simplement --colordans .bashrcl'hôte distant et tout est en jolies couleurs maintenant.

Dima
la source
42
Cela aiderait beaucoup cette réponse si vous disiez vous mettiez --color = auto. .bashrc sur le serveur? Quelles commandes?
vendredi
8
Puisqu'il s'agit d'une vieille question qui reste pertinente, je voulais juste ajouter que sur les systèmes Ubuntu, le fichier .bashrc par défaut comporte une instruction case qui définit les termes autorisés à utiliser des couleurs. Si vous trouvez la "casse" $ TERM $ "dans" ligne dans votre fichier .bashrc, ajoutez "xterm) color_prompt = yes ;;" permettra également d'activer la couleur. Vous pouvez également supprimer la mise en commentaire de la ligne "force_color_prompt = yes" pour l'activer globalement à tout moment.
Mike E
2
c'est le commentaire de Mike E qui a résolu le problème pour moi,
Frank Schrijver le
3
Je suis confus. Que signifie "tout changer en simplement - couleur"? Puis-je voir un exemple?
still_dreaming_1
1
Est-ce que vous parlez de l'hôte local, de l'hôte distant ou des deux?
Adam
19

Cela a fonctionné pour moi:

ssh -t my_host my_command

-tétait la clé. A expliqué .

juanpastas
la source
Cela fonctionne parfaitement et est très pratique pour des tâches uniques. Merci!
XtraSimplicity
J'ai perdu la couleur quand j'ai su -commandé dans l'invite de connexion ssh
dubis
10

On dirait que les couleurs ont déjà été définies ~/.bashrcpour moi et le problème est que ssh n'utilise pas le fichier bashrc. Vous pouvez utiliser bashrc dans votre session ssh en ajoutant ce qui suit à ~/.bash_profile:

if [ -f ~/.bashrc ]; then
      . ~/.bashrc
fi
dariusz gorczynski
la source
1
Cela a fonctionné pour moi et était un moyen simple et efficace de le faire!
Flith
7

Quel est le contenu de votre variable env XTERM sur le serveur lorsque vous vous y connectez?

~ > export | grep -i term
TERM=xterm
Vedran Krivokuća
la source
$ export | grep -i terme déclare -x TERM = "xterm"
Dima
4

Dans mon cas, la partie manquante devait être de couleur ls, grep, etc., que l'on peut ajouter en ajoutant des alias au fichier .bashrc:

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

etc.

Stuart Clark
la source
2

J'ai essayé de modifier les ~./bashrcparamètres (sur le serveur local et distant), mais cela ne semblait pas fonctionner.

Ensuite, j'ai remarqué que ~/.bashrcle serveur distant n'est même pas exécuté si je me connecte via ssh. J'ai donc fait ~/.bashrcdu serveur distant pour exécuter par puttinng if [ -f ~/.bashrc ]; then . ~/.bashrc fidans le serveur distant ~/.bash_profile. (basé sur https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Cette solution n’a donc nécessité aucune modification ~/bashrcdirecte des fichiers, mais un ~/bash_profilefichier de serveur distant pour que ce ~/bashrcfichier soit exécuté.

chris544
la source
Ubuntu utilise .profileet non .bash_profilepar défaut, et la valeur par défaut .profileest source .bashrc.
Muru
C'est correct. Mais est- .profileil exécuté par défaut lors de la connexion via ssh?
chris544
Oui. Sous réserve que vous ne l'ayez pas remplacé .bash_profile, bash s'exécute .profileen tant que shell de connexion. Et SSH commence bash en tant que shell de connexion.
Muru
C'est correct ce ~/.profilen'est pas lu s'il ~/.bash_profileexiste. Mais n'existe-t-il pas ~/.bash_profilepar défaut sur Ubuntu?
chris544
Voir mon premier commentaire à nouveau. Non, ça ne va pas. Ubuntu utilise .profile.
Muru
2

Etant donné que les couleurs fonctionnaient bien tout en étant connectées directement, je me suis contenté de ne pas commenter la ligne force_color_prompt=yesdu fichier ~/.bashrc, ce qui m'a également donné les couleurs sur 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
la source
Upvote, cela semble être la solution la plus simple.
snwflk
1

Dans ma situation, j'ai récemment installé chef-localet il m'a demandé d'ajouter une ligne à .bash_profile. Lorsque je me connecte, .bashrcne charge plus jamais, car il a vu .bash_profile.

Ce que j'ai fait a été d'ajouter une ligne dans .bash_profile:

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

Je me suis déconnecté puis rentré et j'ai tout de suite eu mon terminal coloré.

Kevin
la source
0

Il y a un commentaire de "Mike E" ci-dessus qui contenait la réponse pour moi, mais ce n'est pas seulement difficile à lire, c'est assez difficile de comprendre ce qu'il veut dire si vous n'en utilisez pas .bashrcbeaucoup - et je ne le fais pas t.

Après avoir vissé un peu, j'ai obtenu les résultats souhaités en modifiant les lignes suivantes ~/.bashrcsur la machine à laquelle je me connectais avec ssh:

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

à:

# 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

Je pense que j'aurais pu simplement ajouter "| xterm" après "couleur" dans la première ligne, ou creuser et comprendre pourquoi ssh utilisait "xterm" au lieu de "xterm-color" et changer cela, mais cela fonctionne et je ont d'autres choses à faire maintenant.

Mike Wise
la source
0

Je perdais ma couleur lors de la connexion via un proxy car TERM=dumbje l'ai donc corrigée:

ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"
ErichBSchulz
la source
1
Vous devez également allouer un terminal lors de la première connexion, si vous voulez le faire.
Muru