Wie kann ich die Terminalfarben automatisch ändern, wenn ich einen Server ssh?

14

Ich logge mich häufig von meinem os x-Terminalfenster aus auf verschiedenen Servern ein.

Ich möchte ein Farbschema für verschiedene Hosts zuweisen, damit meine Terminalfenster leichter voneinander zu unterscheiden sind. Kann das automatisch gemacht werden?


quelle

Antworten:

11

Hier ist eine vollständige Lösung. Behalten Sie eine Liste Ihrer Server-IP-Adressen und / oder -Domänen und die gewünschten Farben in ~ / .server_colors bei:

192.168.122.102, Red Sands
192.168.122.103, Ocean
www.foo.com, Grass
foo.com, Grass

Fügen Sie dann diese Zeile zu ~ / .profile hinzu, um den Befehl ssh zu hijacken:

alias ssh = "~ / bin / safe_ssh $ 1"

Vergleichen Sie dann, was in Ihrem SSH-Ziel nach dem @ steht, mit Ihrer Liste. Wenn eine Übereinstimmung vorliegt, führen Sie ein AppleScript aus, um den Bildschirm in die entsprechende Farbe zu ändern. Hier ist ~ / bin / safe_ssh:

#! / bin / bash
ip = `echo $ 1 | schneiden Sie -d "@" -f2` aus
match = `cat ~ / .server_colors | grep $ ip | wc -l`
if [$ match -gt 0]
dann
    color = `cat ~ / .server_colors | grep $ ip | schneiden Sie -f2 -d "," `
    osascript ~ / bin / change_terminal_color.scpt "$ color" 2> / dev / null
fi
/ usr / bin / ssh $ 1

Und zum Schluss hier ~ / bin / change_terminal_color.scpt

on run argv
    teilen Sie der Anwendung "Terminal" mit, die aktuellen Einstellungen der ausgewählten Registerkarte von Fenster 1 auf (erste Einstellung mit dem Namen (Punkt 1 von argv)) zu setzen
Lauf beenden

Ich habe den größten Teil dieses Codes aus diesem Blog-Beitrag entnommen .

muirbot
quelle
1
Sehr schön. Im safe_ssh-Skript sollte $ 1 $ @ sein, damit zusätzliche Parameter an SSH übergeben werden können. Vielleicht auch ein Aufruf nach ssh, um das Terminal wieder auf den Standard zurückzusetzen. Eine letzte Änderung würde dies ziemlich perfekt machen: Unterstützung für SSH-Befehle, die kein '@' enthalten.
NOW2
2

Die Lösung von @muirbot funktioniert wirklich gut für mich. Ich habe ein paar kleine Verbesserungen vorgenommen. Ich werde es unter seinem Beitrag hinzufügen, sobald ich genug Ruf habe.

Ersetzen Sie die Leitung

ip =echo $1 | cut -d"@" -f2
mit
ip =echo $@ | grep -Eio [[:alnum:]_.-]+@[[:alnum:]_.-]+ | cut -d@ -f2

Diese Änderung ermöglicht es, Ihrem ssh-Befehl zusätzliche Argumente wie "ssh -p 1111 userName @ host" zuzuweisen.

Der reguläre Ausdruck ermöglicht einfache IPv4-Adressen und Domänennamen.

Um mehrere Argumente weiter zu unterstützen, ändern Sie die letzte Zeile in

/ usr / bin / ssh $ @

Vincent Nikkelen
quelle
0

Ich habe nur das Gleiche gesucht und diesen Artikel gefunden:

http://akrabat.com/php/osx-terminal-colours/

Es verwendet ein PHP-Skript, um die Terminalfarben per Applescript zu ändern. Sie können für jeden Server Zuordnungen in verschiedenen Farben einrichten. Funktioniert gut für mich, aber verspüre den Drang, das PHP-Zeug in Ruby umzuschreiben :)

fk

effkay
quelle
0

Ich verwende ein Skript, das SSH in xterm-Fenstern mit verschiedenen bg / fg-Farben startet. Es wählt die Farben basierend auf dem Hash des Hostnamens aus einer Farbspanne aus, sodass keine Konfiguration erforderlich ist.

Das Skript ist in Ruby geschrieben: https://github.com/mickeyil/ssx

miluz
quelle
0

Wenn Sie iTerm2 verwenden, erstellen Sie eine Datei ~/bin/ssh-host-color.shmit dem Inhalt von https://gist.github.com/jbochi/31f118b8ae2882a2c90fa46c46509b57 :

set_term_bgcolor(){
  local R=$1
  local G=$2
  local B=$3
  /usr/bin/osascript <<EOF
tell application "iTerm"
  tell the current window
    tell the current session
      set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))}
    end tell
  end tell
end tell
EOF
}

if [[ "$@" =~ "production.example.com" ]]; then
  set_term_bgcolor 40 0 0
elif [[ "$@" =~ "qa.example.com" ]]; then
  set_term_bgcolor 0 40 0
fi

trap "set_term_bgcolor 0 0 0" EXIT

ssh $@

Fügen Sie Ihrer ~/.aliases.shDatei die folgende Zeile hinzu :

alias ssh="~/bin/ssh-host-color.sh $@"
jbochi
quelle