Des invites de couleurs différentes pour différentes machines lors de l'utilisation de terminal / ssh?

11

J'ai 5 machines dans lesquelles je travaille constamment. Cela devient de plus en plus frustrant lorsque j'émets de mauvaises commandes sur de mauvaises boîtes. Heureusement, je n'ai encore rien fait de mal. Je voulais savoir s'il y a un hack que je peux coder en dur qui affichera mon invite dans différentes couleurs en fonction de la machine dans laquelle je suis ssh? Tels que bleu pour desktop1, violet pour ordinateur portable, rouge pour serveur, etc.? Est-ce possible?

Actuellement, j'utilise cette commande d'exportation PS1 = "\ e [0; 31m [\ u @ \ h \ W] \ $ \ e [m" prise à partir d'ici http://www.cyberciti.biz/faq/bash-shell -change-the-color-of-my-shell-prompt-under-linux-or-unix / mais cela ne fonctionne évidemment pas sur ssh.

De plus, si vous avez d'autres conseils bash sympas pour m'aider à soulager ma vue, ce sera merveilleux. J'ai eu cette astuce qui colore les pages de manuel.

http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/

bcrawl
la source
1
La ligne name@ ** server** avant chaque commande ne transmet pas sur quel serveur vous êtes? Il faut un certain temps pour s'y habituer, mais c'est le meilleur moyen existant
TheLQ
Sur quel système d'exploitation votre ordinateur portable fonctionne-t-il?
SamK
1
name @ server est particulièrement inutile lors de l'utilisation de choses comme le cloud Amazon, car il change chaque démarrage et ne transmet pas le but de la boîte ou un nom facilement mémorisable (utilisateur @ ip-xxxx). Donc +1 pour cette question :)
Rafiq Maniar

Réponses:

11

La méthode que j'utilise est de générer une couleur pour le nom d'hôte à partir du nom d'hôte. Il n'y a pas beaucoup de couleurs à choisir, donc cela générera facilement des conflits, mais c'est utile pour la petite quantité de machines que je gère.

hostnamecolor=$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\[\e[${hostnamecolor}m\]\]\h \[\e[32m\]\w\[\e[0m\]\n$ '

La première ligne génère un nombre compris entre 30 (inc) et 36 (exc) à partir du nom d'hôte de la machine. La deuxième ligne l'applique à l'invite avec le nom d'utilisateur et le chemin d'accès en vert (32) et le nom d'hôte dans la couleur générée.

Aucune couleur d'arrière-plan n'est définie et j'exclus le cyan (36) et le blanc (37) du premier plan pour éviter les conflits avec l'arrière-plan des terminaux que j'utilise.

Dan Midwood
la source
Ainsi, il peut générer la même couleur pour le premier plan et l'arrière-plan?
Chris S
Aucune couleur d'arrière-plan n'est générée. Mais vous avez raison, la couleur générée peut correspondre à l'arrière-plan. J'exclus le blanc (37) et le cyan (36) car ils ne fonctionnent pas bien avec les arrière-plans des terminaux que j'utilise. J'ai édité la réponse pour que ce soit clair.
Dan Midwood
3

Tu es sur la bonne piste. J'ai utilisé la méthode détaillée sur la page vers laquelle vous créez un lien et expliqué exactement comment sur mon blog . Cela fonctionne pour moi en utilisant PuTTY à partir d'une boîte Windows et également SSH d'un serveur CentOS à un autre. Si cela ne fonctionne pas pour vous et que vous êtes sûr que la syntaxe est correcte, cela peut être dû à votre client SSH.

dunxd
la source
Salut, j'ai changé le .bashrc et je comprends que je peux changer les couleurs localement. Ce que je voulais, c'est que lorsque je ssh vers un autre ordinateur, l'invite change de couleur. Je sais que le terminal ne le saura pas automatiquement, alors je cherchais des pointeurs pour que cela se produise.
bcrawl
1
Edit: ok, oui vous avez raison. Si le fichier .bashrc est modifié sur chaque ordinateur, lorsque vous SSH, il affichera ses couleurs configurées. Je n'éditais pas le bon fichier. Merci. Considérez-le comme résolu.
bcrawl
2
Si cette réponse vous a conduit directement à la solution, envisagez de la marquer comme réponse acceptée en cliquant sur le contour d'une coche à gauche de la réponse.
Kevin M
1

À mon travail, nous avons différentes étapes de serveurs

développement de la production

J'utilise une invite rouge comme prod et verte pour la mise en scène. Maintenant, toutes les machines de transfert ont stg dans le domaine.

Alors prod serait

web1.domain.com
web2.domain.com

Staging / Dev serait

stg-web1.domain.com
stg-web2.domain.com
dev-web1.domain.com
etc

Cela ne fonctionnera vraiment que pour redhat / centos

Mais pour les serveurs prod, j'ai les éléments suivants dans

/etc/sysconfig/bash-prompt-xterm

L'intérieur est

export PS1="\[[\e[1;31m\]\u@\[\e[1;31m\]\h\[\e[0m\] \W] "

Cela passera au rouge. Maintenant, vous ne pouvez pas toucher / etc / bashrc et toutes les autres machines non prod resteront la couleur de premier plan normale que vous utilisez .. mais je les ai faites vertes

if [ "$PS1" ]; then
    case $TERM in
        xterm*)
                if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
                        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
                else
                        PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
                fi
                ;;

Que si le bloc devait être là .. Je viens de changer la couleur de l'autre partie pour qu'elle soit verte .. 33 est verte

Mike
la source
0

Vous pouvez modifier le bash.rc sur chaque machine pour leur donner différentes couleurs d'invite. Ou si vous avez suffisamment de privilèges, modifiez la configuration sshd pour permettre le transfert de l'environnement utilisateur via la PermitUserEnvironmentdirective.

théiste
la source
0

Nous travaillons sur une solution plus complète basée sur la somme de contrôle des chaînes de noms d'hôte dans cet essentiel . Compatibilité 256 couleurs. Mis à part le cas où vous êtes réellement intéressé à déterminer vous-même une couleur spécifique pour chacun de vos serveurs, je pense que c'est l'un de ces problèmes "c'est pour cela que nous avons des ordinateurs", donc obtenir des couleurs "aléatoires" déterminées pour vous en fonction de les sommes de contrôle devraient être une bonne approche.

lkraav
la source