Terminal-Farben für SSH-Hosts vergeben

Wer öfter mit SSH arbeitet, läuft schnell Gefahr die Übersicht über die offenen Remote-Terminals zu verlieren. Damit man nicht versehentlich Befehle auf dem falschen Host ausführt, wäre es sinnvoll die Farben automatisch zu wechseln, sobald man sich mit SSH auf einem neuen Host einloggt. Wenn man ein bisschen sucht, findet man für das Problem gleich mehrere Lösungen, die aber alle einige Nachteile haben: Oft funktionieren diese Lösungen nur für einen bestimmten Terminal-Emulator oder die Farben verschwinden nach dem ersten clear gleich wieder.
Wer eine umfassende Lösung will, kann das Programm Colorize verwenden. Colorize führt ein beliebiges Programm in einem virtuellen Terminal aus und ändert dabei die verwendeten Farben, ohne dass ein neues Terminal-Fenster geöffnet werden muss.
Zuerst compilen wir das Programm und verschieben es nach /usr/local:

./make
sudo cp ./colorize /usr/local/bin/colorize

Um die Farben für die einzelnen Hosts zu konfigurieren, wird die neue Datei ~/.ssh/host_colors erstellt. Jedem Host auf jeder Zeile kann im ersten Eintrag eine Hintergrundfarbe und im zweiten Eintrag eine Textfarbe zugewiesen werden. Bei den Farben muss eventuell ein bisschen probiert werden, da die Terminals oft nicht alle Farben unterstützen.

my.production.host 0x990000 0xffffff

Als nächstes muss in der ~/.bash_aliases noch eine Alias gesetzt werden, in dem ssh über colorize aufgerufen wird. Dabei wird die Konfiguration für den Host aus der eben erstellen host_colors geladen:

function colorssh() {
   if [ $# -gt 2 ]
     then
       # colorize only for simple ssh commands
       ssh "#@"
       return;
   fi
   host=$1;
   array=(`cat ~/.ssh/host_colors | egrep "^\s*$host\s+" | sed -e "s/^\s*//" | sed -e "s/\s\s*/ /"`)
   backg=${array[1]}
   foreg=${array[2]}
   if [ -z $backg ]
     then
       backg="0x111111";
   fi
   if [ -z $foreg ]
    then
      foreg="0xffffff";
    fi
   colorize -b $backg -f $foreg ssh "$@"
}
alias ssh=colorssh

Wenn man jetzt mit ssh den Host my.production.host öffnet, wird sich die die Farbe beim Start automatisch ändern.

An der Farbe kann man schnell erkennen, auf welchem Host sich das Terminal momentan befindet.

An der Farbe kann man schnell erkennen, auf welchem Host sich das Terminal momentan befindet.