Unterschiedliche Farbansagen für unterschiedliche Maschinen bei Verwendung von Terminal / SSH?

11

Ich habe 5 Maschinen, in die ich ständig ssh, um zu arbeiten. Es wird immer frustrierender, wenn ich falsche Befehle für falsche Boxen gebe. Zum Glück habe ich noch nichts Schlimmes getan. Ich wollte wissen, ob es einen Hack gibt, den ich fest codieren kann, der meine Eingabeaufforderung in verschiedenen Farben anzeigt, basierend auf der Maschine, auf der ich ssh bin. Wie blau für desktop1, lila für Laptop, rot für Server usw.? Ist das möglich?

Derzeit verwende ich diesen Befehl export PS1 = "\ e [0; 31m [\ u @ \ h \ W] \ $ \ e [m" von hier http://www.cyberciti.biz/faq/bash-shell -Ändere-die-Farbe-meiner-Shell-Eingabeaufforderung-unter-Linux-oder-Unix /, aber es funktioniert offensichtlich nicht über ssh.

Auch wenn Sie andere coole Bash-Tipps haben, die mir helfen, meine Sicht zu erleichtern, wird es wunderbar sein. Ich habe diesen Tipp bekommen, der die Manpages färbt.

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

bcrawl
quelle
1
Die Zeile name@ ** server** vor jedem Befehl gibt nicht an, auf welchem ​​Server Sie sich befinden. Es ist etwas gewöhnungsbedürftig, aber es ist der beste existierende Weg
TheLQ
An welchem ​​Betriebssystem arbeitet Ihr Laptop?
SamK
1
name @ server ist besonders wenig hilfreich, wenn Sie Dinge wie die Amazon Cloud verwenden, da sie jeden Start ändert und nicht den Zweck der Box oder einen leicht einprägsamen Namen (user @ ip-xxxx) wiedergibt. Also +1 für diese Frage :)
Rafiq Maniar

Antworten:

11

Die Methode, die ich verwende, besteht darin, aus dem Hostnamen eine Farbe für den Hostnamen zu generieren. Es stehen nicht viele Farben zur Auswahl, so dass es leicht zu Konflikten kommt, aber es ist nützlich für die kleine Anzahl von Maschinen, die ich verwalte.

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$ '

Die erste Zeile generiert aus dem Hostnamen des Computers eine Zahl zwischen 30 (inc) und 36 (exc). In der zweiten Zeile wird es auf die Eingabeaufforderung mit Benutzername und Pfad in Grün (32) und dem Hostnamen in der generierten Farbe angewendet.

Es sind keine Hintergrundfarben festgelegt, und ich schließe Cyan (36) und Weiß (37) aus dem Vordergrund aus, um Konflikte mit den Hintergründen der von mir verwendeten Terminals zu vermeiden.

Dan Midwood
quelle
So kann es für Vordergrund und Hintergrund die gleiche Farbe erzeugen?
Chris S
Es wird keine Hintergrundfarbe generiert. Sie haben jedoch Recht, dass die generierte Farbe mit dem Hintergrund übereinstimmen kann. Ich schließe Weiß (37) und Cyan (36) aus, weil sie mit den von mir verwendeten Terminalhintergründen nicht gut funktionieren. Ich habe die Antwort bearbeitet, um dies zu verdeutlichen.
Dan Midwood
3

Du bist auf dem richtigen Weg. Ich habe die Methode verwendet, die auf der Seite, auf die Sie verlinken, beschrieben ist, und genau beschrieben, wie in meinem Blog . Es funktioniert für mich mit PuTTY von einer Windows-Box und auch SSH von einem CentOS-Server zu einem anderen. Wenn es bei Ihnen nicht funktioniert und Sie sicher sind, dass Sie die richtige Syntax haben, liegt dies möglicherweise an Ihrem SSH-Client.

dunxd
quelle
Hallo, ich habe die .bashrc geändert und verstehe, dass ich die Farben lokal ändern kann. Was ich wollte war, dass sich die Eingabeaufforderung ändert, wenn ich auf einen anderen Computer ssh. Ich weiß, dass das Terminal es nicht automatisch weiß, also habe ich nach Hinweisen gesucht, um dies zu ermöglichen.
Bcrawl
1
Edit: ok ja du hast recht Wenn die .bashrc-Datei auf jedem Computer geändert wird, werden beim SSH die konfigurierten Farben angezeigt. Ich habe nicht die richtige Datei bearbeitet. Vielen Dank. Betrachten Sie es als gelöst.
Bcrawl
2
Wenn diese Antwort Sie direkt zur Lösung geführt hat, können Sie diese als akzeptierte Antwort markieren, indem Sie auf den Umriss eines Häkchens links neben der Antwort klicken.
Kevin M
1

Bei meiner Arbeit haben wir verschiedene Stufen von Servern

Produktion Inszenierung Entwicklung

Ich benutze eine rote Eingabeaufforderung als Prod und eine grüne für die Inszenierung. Jetzt haben alle Staging-Maschinen stg in der Domäne.

So wäre Prod

web1.domain.com
web2.domain.com

Staging / Dev wäre

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

Dies funktioniert nur bei Redhat / Centos

Aber für Produktserver habe ich folgendes in

/etc/sysconfig/bash-prompt-xterm

Innen ist

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

Dadurch wird die Eingabeaufforderung rot. Jetzt können Sie / etc / bashrc nicht mehr berühren, und alle anderen Nicht-Produktmaschinen behalten die normale Vordergrundfarbe bei, die Sie verwenden. Aber ich habe sie grün gemacht

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
                ;;

Das, wenn Block da sein sollte .. Ich habe gerade die Farbe auf dem anderen Teil geändert, um grün zu sein .. 33 ist grün

Mike
quelle
0

Sie können die bash.rc auf jedem Computer ändern, um ihnen unterschiedliche Eingabeaufforderungsfarben zu geben. Wenn Sie über ausreichende Berechtigungen verfügen, ändern Sie die sshd-Konfiguration, um die Übertragung der Benutzerumgebung über die PermitUserEnvironmentDirektive zu ermöglichen.

Theist
quelle
0

Wir arbeiten an einer umfassenderen Lösung für die Prüfung von Hostnamen-Zeichenfolgen in dieser Übersicht . 256 Farbkompatibilität. Abgesehen von dem Fall, in dem Sie tatsächlich daran interessiert sind, eine bestimmte Farbe für jeden Ihrer Server selbst zu bestimmen, ist dies meines Erachtens eines der Probleme, für die wir Computer haben. Daher werden "zufällige" Farben basierend auf Ihnen ermittelt Prüfsummen sollten ein guter Ansatz sein.

lkraav
quelle