Jak mogę automatycznie zmieniać kolory terminali, gdy ssh serwer?

14

Często loguję się na różne serwery z okna terminala os x.

Chciałbym przypisać schemat kolorów dla różnych hostów, aby moje okna terminali były łatwiejsze do odróżnienia. Czy można to zrobić automatycznie?


źródło

Odpowiedzi:

11

Oto kompletne rozwiązanie. Zachowaj listę adresów IP serwerów i / lub domen oraz kolory, które chcesz dla nich w ~ / .server_colors:

192.168.122.102, Czerwone Piaski
192.168.122.103, Ocean
www.foo.com, Grass
foo.com, Grass

Następnie dodaj ten wiersz do ~ / .profile, aby przejąć polecenie ssh:

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

Następnie porównaj cokolwiek po @ w twoim celu ssh z twoją listą. W przypadku dopasowania uruchom skrypt AppleScript, aby zmienić ekran na odpowiedni kolor. Oto ~ / bin / safe_ssh:

#! / bin / bash
ip = `echo $ 1 | cut -d "@" -f2`
match = `cat ~ / .server_colors | grep $ ip | wc -l`
jeśli [$ dopasowanie -gt 0]
następnie
    color = `cat ~ / .server_colours | grep $ ip | cut -f2 -d "," '
    osascript ~ / bin / change_terminal_color.scpt "$ color" 2> / dev / null
fi
/ usr / bin / ssh $ 1

I na koniec, oto ~ / bin / change_terminal_color.scpt

w biegu argv
    powiedz aplikacji „Terminal”, aby ustawiła bieżące ustawienia wybranej zakładki okna 1 na (pierwszy zestaw ustawień, którego nazwa to (pozycja 1 argv))
koniec biegu

Większość tego kodu wziąłem z tego postu na blogu .

muirbot
źródło
1
Bardzo dobrze. W skrypcie safe_ssh $ 1 powinien wynosić $ @, aby umożliwić przekazanie dodatkowych parametrów do SSH. Być może także wywołanie po ssh, aby przywrócić terminal do wartości domyślnej. Ostatnia edycja sprawiłaby, że byłoby to prawie idealne: obsługa poleceń SSH niezawierających „@”.
nOw2
2

Rozwiązanie @muirbot działa dla mnie naprawdę dobrze. Wprowadziłem kilka drobnych usprawnień. Dodam go poniżej jego posta, gdy będę miał wystarczająco dużo reputacji.

Zamień linię

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

Ta zmiana pozwala na podanie dodatkowych argumentów do polecenia ssh, takich jak „ssh -p 1111 nazwa_użytkownika @ host”

Wyrażenie regularne pozwala na proste adresy IPv4 i nazwy domen.

Aby dalej obsługiwać wiele argumentów, zmień ostatni wiersz na

/ usr / bin / ssh $ @

Vincent Nikkelen
źródło
0

Właśnie szukałem tego samego i znalazłem ten artykuł:

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

Używa skryptu php do zmiany kolorów terminala przez applecript. Możesz skonfigurować mapowania w różnych kolorach dla każdego serwera. Działa świetnie dla mnie, choć czuję potrzebę przepisania php na ruby ​​:)

fk

wymazać
źródło
0

Używam skryptu, który uruchamia SSH w oknach xterm z różnymi kolorami bg / fg. Wybiera kolory na podstawie skrótu nazwy hosta z zakresu kolorów, dzięki czemu nie jest wymagana konfiguracja.

Skrypt jest napisany w języku Ruby: https://github.com/mickeyil/ssx

miluz
źródło
0

Jeśli używasz iTerm2, utwórz plik o nazwie ~/bin/ssh-host-color.shz zawartością z 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 $@

I dodaj następujący wiersz do swojego ~/.aliases.shpliku:

alias ssh="~/bin/ssh-host-color.sh $@"
jbochi
źródło