Jak automatycznie zmienić tło terminala na podstawie nazwy hosta ssh?


9

Jak można progmatycznie zmieniać kolor tła okna terminala na podstawie nazwy hosta, w której ssh?

tzn. kiedy jestem ssh'owany w systemach wbudowanych na żywo na sprzęcie produkcyjnym, chcę, aby tło terminala zmieniło kolor na czerwony - w celu „utrzymania świadomości”, na którym serwerze jestem. Posiadanie samej nazwy hosta w PS1 nie zawsze jest wystarczające.

Korzystam z gnome-terminal, ale zaakceptowałbym każde możliwe rozwiązanie pod Linuksem.

Odpowiedzi:


7

Możesz użyć polecenia ssh LocalCommand, aby wyemitować sekwencję ucieczki ANSI w celu zmiany koloru tła, i utworzyć sekcję dla hosta (lub wzorca hosta), aby wybrać odpowiedni kolor, który ma odpowiadać zdalnemu hostowi.

Jeśli twoje serwery produkcyjne przestrzegają konwencji nazewnictwa, takiej jak „zaczyna się od prod”, możesz wypróbować następujący fragment kodu w pliku ~ / .ssh / config: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

Jeśli nie ma przydatnej konwencji nazewnictwa do korzystania ze wzorów wieloznacznych, możesz po prostu wymienić nazwy hostów oddzielone spacjami. Można również tworzyć dodatkowe bloki hosta z różnymi wartościami kolorów i ciągami dla różnych innych serwerów nieprodukcyjnych.

Po podłączeniu do hosta pasującego do wzoru odpowiedni druk zostanie wykonany lokalnie, zmieniając kolor tła na czerwony ([41m wybiera kolor czerwony jako kolor tła, część [2J odświeża cały ekran zaktualizowanym kolorem tła. Zobacz https://en.wikipedia.org/wiki/ANSI_escape_code, aby uzyskać więcej opcji)

Największą niedogodnością związaną z tym podejściem jest to, że kolor tła utrzymuje się po wyjściu z sesji ssh; Nie ma odpowiednika LocalCommand, który można uruchomić przy rozłączeniu (o czym wiem). Alias ​​lub skrypt opakowania powłoki dla ssh może zostać wywołany printf "\x1b[0m"jako reset. Z drugiej strony ustawienie koloru tła za pomocą LocalCommand oznacza, że ​​otrzymasz zestaw kolorów, nawet jeśli ssh nie jest uruchamiany za pomocą skryptu opakowania lub aliasu.


Doskonała odpowiedź! Jedyny problem, który widzę, który jest jednak znaczący, polega na tym, że zmiana koloru pozostaje tylko dla pierwszego „ekranu”. Gdy tylko zostaną wprowadzone polecenia, a ekran przewinie się w górę, zmieni kolor z czerwonego na czarny. Być może kontrola koloru na terminalu gnome zastępuje sekwencję ucieczki ANSI? Czy znasz obejście?
Mtl Dev

Czy możliwe jest wykonanie czegoś podobnego, na przykład zmienna zachęty PS1 na hoście SSH?
Mtl Dev

Reset może być spowodowany sekwencjami w zmiennej zachęty PS1 lub jeśli masz komendy takie jak lsaliasy ls --color=autoi zawiera ona sekwencję resetowania „<ESC> [0m”. Aby to utrzymać, prawdopodobnie będziesz musiał skonfigurować różne profile terminalu gnome i przejść trasę skryptu opakowania, wybierając nazwę profilu na podstawie nazwy hosta i wywołującgnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

Masz całkowitą rację: jeśli mam ls --colourLUB sekwencję resetowania w PS1, jedno z nich zastąpi poprzednie ustawienia kolorów ansi. Spróbuję więc wdrożyć proponowane rozwiązanie skryptu opakowania, co również jest doskonałym pomysłem! Merci beaucoup!
Mtl Dev 22.12.16

Tylko dlatego, że inni są świadomi: wydaje się, że dodanie printf do ~ / .ssh / config psuje rsync. Powiązane szczegóły tutaj: serverfault.com/questions/267154/…
Mtl Dev 22.12.16
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.