Wie kann ich das Apfel Terminalfenster auto Farbschema ändern, wenn ich zu einem bestimmten Server ssh
-
03-07-2019 - |
Frage
Wenn ich in einen Remote-Produktions-Server ssh würde ich das Farbschema meines Terminalfensters gerne etwas ändern brigh und beängstigend, vorzugsweise rot, um mich zu warnen, dass ich eine Live beängstigend Server berühre.
Wie kann ich es automatisch erkennen, dass ich irgendwo ssh'ed, und wenn das irgendwo auf einer bestimmten Liste ist, das Farbschema ändern?
Ich mag das Schema von Terminal.app aktualisieren, nicht wissen, wie ich dies in einer reinen Linux tun würde / Unix-env
Lösung
Setzen Sie folgende Skript in ~/bin/ssh
(sicherzustellen ~/bin/
sah vor /usr/bin/
in Ihrer PATH):
#!/bin/sh
HOSTNAME=`echo $@ | sed s/.*@//`
set_bg () {
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}
on_exit () {
set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT
case $HOSTNAME in
production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
*) set_bg "{0, 45000, 0, 50000}" ;;
esac
/usr/bin/ssh "$@"
Das Skript oben extrahiert Hostnamen aus der Leitung "username @ host" (es wird davon ausgegangen Sie sich einloggen, um Remote-Hosts mit "ssh user @ host").
je Dann auf Hostnamen entweder setzt roten Hintergrund (für Produktionsserver) oder grünen Hintergrund (für alle andere). Als Ergebnis werden alle Ihre ssh Fenster mit farbigem Hintergrund sein wird.
Ich gehe davon aus hier Ihre Standard-Hintergrund schwarz ist, so Skript kehrt die Hintergrundfarbe schwarz zurück, wenn Sie vom Remote-Server abzumelden (siehe „Trap on_exit“).
Bitte beachten Sie, aber dieses Skript Kette von ssh-Logins nicht von einem Host zum anderen verfolgen. Als Ergebnis wird der Hintergrund für den Fall, grün sein, Sie zu Testserver zuerst anmelden, anmelden, dann zur Produktion von ihm.
Andere Tipps
Eine weniger bekannte Funktion des Terminals ist, dass Sie den Namen eines Einstellungsprofils auf einen Befehlsnamen festlegen können, und es wird dieses Profil wählen, wenn Sie ein neues Terminal entweder über Shell> Neuer Befehl ... oder Shell> New Remote-Verbindung ... .
Zum Beispiel Ihr Standardprofil duplizieren, nennen Sie es „ssh“ und legen Sie die Hintergrundfarbe auf rot. Verwenden Sie dann Neuer Befehl ... laufen ssh host.example.com
.
Sie paßt auch auf Argumente, so können Sie es unterschiedliche Einstellungen für verschiedene Remote-Hosts, zum Beispiel wählen.
Hier ist eine kombinierte Lösung auf ein paar bestehenden Antworten aus, dass die Ausfahrt abwickelt. Hierzu gehört auch ein wenig mehr, wenn Sie nicht mit 16-Bit-Farbwerte beschäftigen möchten.
Dies soll gesetzt werden, um Ihre ~ / .bash_profile
# Convert 8 bit r,g,b,a (0-255) to 16 bit r,g,b,a (0-65535)
# to set terminal background.
# r, g, b, a values default to 255
set_bg () {
r=${1:-255}
g=${2:-255}
b=${3:-255}
a=${4:-255}
r=$(($r * 256 + $r))
g=$(($g * 256 + $g))
b=$(($b * 256 + $b))
a=$(($a * 256 + $a))
osascript -e "tell application \"Terminal\" to set background color of window 1 to {$r, $g, $b, $a}"
}
# Set terminal background based on hex rgba values
# r,g,b,a default to FF
set_bg_from_hex() {
r=${1:-FF}
g=${2:-FF}
b=${3:-FF}
a=${4:-FF}
set_bg $((16#$r)) $((16#$g)) $((16#$b)) $((16#$s))
}
# Wrapping ssh command with extra functionality
ssh() {
# If prod server of interest, change bg color
if ...some check for server list
then
set_bg_from_hex 6A 05 0C
end
# Call original ssh command
if command ssh "$@"
then
# on exit change back to your default
set_bg_from_hex 24 34 52
fi
}
- set_bg - dauert 4 (8 Bit) Farbwerte
- set_bg_from_hex - dauert 4 Hex-Werte. die meisten meiner Farbreferenzen ich verwende, sind in hex, so das macht es noch einfacher für mich. Es könnte noch einen Schritt weiter unternommen werden, um tatsächlich #RRGGBB statt RR GG BB zu analysieren, aber es funktioniert gut für mich.
- ssh - Einwickeln der Standard ssh-Befehl mit dem, was benutzerdefinierte Logik, die Sie wollen. Die if-Anweisung wird verwendet, um den Ausgang zu handhaben die Hintergrundfarbe zu setzen.
Die Kombination von Antworten 1 und 2 haben die folgenden:
Erstellen ~/bin/ssh
Datei wie in 1 mit folgendem Inhalt beschrieben:
#!/bin/sh
# https://stackoverflow.com/a/39489571/1024794
log(){
echo "$*" >> /tmp/ssh.log
}
HOSTNAME=`echo $@ | sed s/.*@//`
log HOSTNAME=$HOSTNAME
# to avoid changing color for commands like `ssh user@host "some bash script"`
# and to avoid changing color for `git push` command:
if [ $# -gt 3 ] || [[ "$HOSTNAME" = *"git-receive-pack"* ]]; then
/usr/bin/ssh "$@"
exit $?
fi
set_bg () {
if [ "$1" != "Basic" ]; then
trap on_exit EXIT;
fi
osascript ~/Dropbox/macCommands/StyleTerm.scpt "$1"
}
on_exit () {
set_bg Basic
}
case $HOSTNAME in
"178.222.333.44 -p 2222") set_bg "Homebrew" ;;
"178.222.333.44 -p 22") set_bg "Ocean" ;;
"192.168.214.111") set_bg "Novel" ;;
*) set_bg "Grass" ;;
esac
/usr/bin/ssh "$@"
Machen Sie es ausführbar. chmod +x ~/bin/ssh
Datei ~/Dropbox/macCommands/StyleTerm.scpt
hat folgenden Inhalt:
#https://superuser.com/a/209920/195425
on run argv
tell application "Terminal" to set current settings of selected tab of front window to first settings set whose name is (item 1 of argv)
end run
Wörter Basic, Homebrew, Ocean, Novel, Grass
von Mac OS Terminaleinstellungen sind cmd , :
Sie können das $ PS1 Variable in Ihrer .bashrc gesetzt.
red='\e[0;31m'
PS1="$\[${red}\]"
EDIT: Öffnen Sie dazu den Terminal. Dann sagt
#touch .bashrc
Sie können dann öffnen Bashrc in textEdit oder in TextWrangler und fügen die bisherigen Befehle.
Eine andere Lösung ist es, die Farben Straße in der SSH-Konfigurationsdatei zu setzen:
innen ~ / .ssh / config
Host Server1
HostName x.x.x.x
User ubuntu
IdentityFile ~/Desktop/keys/1.pem
PermitLocalCommand yes
LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {27655, 0, 0, -16373}"
Host Server2
HostName x.x.x.x
User ubuntu
IdentityFile ~/Desktop/keys/2.pem
PermitLocalCommand yes
LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {37655, 0, 0, -16373}"
Xterm-kompatible Unix-Terminals verfügt über Standard-Escape-Sequenzen für die Hintergrund- und Vordergrundfarben einstellen. Ich bin mir nicht sicher, ob Terminal.app Aktien sie; es sollte.
case $HOSTNAME in
live1|live2|live3) echo -e '\e]11;1\a' ;;
testing1|testing2) echo -e '\e]11;2\a' ;;
esac
Die zweite Zahl gibt die gewünschte Farbe. 0 = Standard, 1 = rot, 2 = grün, usw. Also das Snippet, wenn sie in einem gemeinsamen .bashrc setzen, werden Sie auf die Prüfung diejenigen einen roten Hintergrund auf Live-Server und einen grünen Hintergrund geben. Sie sollten auch so etwas wie diese fügen Sie den Hintergrund zurückzusetzen, wenn Sie sich abmelden.
on_exit () {
echo -e '\e]11;0\a'
}
trap on_exit EXIT
EDIT: Google drehte einen Weg bis der Hintergrundfarbe unter Verwendung von Apple gesetzt. Offensichtlich funktioniert dies nur, wenn sie auf der gleichen Maschine wie Terminal.app laufen. Sie können mit ein paar Wrapper-Funktionen um das funktionieren:
set_bg_color () {
# color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}
sshl () {
set_bg_color "{45000, 0, 0, 50000}"
ssh "$@"
set_bg_color "{0, 0, 0, 50000}"
}
Sie müssen sie daran zu erinnern SSHL statt ssh ausgeführt werden, wenn zu einem Live-Server zu verbinden. Eine weitere Möglichkeit ist es, eine Wrapper-Funktion für ssh zu schreiben, die seine Argumente für bekannte Live-Host-Namen durchsucht und stellt den Hintergrund entsprechend.
Warum ändert sich nicht nur die Shell-Eingabeaufforderung, wenn Sie sich per SSH angemeldet sind? Es gibt in der Regel bestimmte Shell-Variablen: SSH_CLIENT , SSH_CONNECTION , SSH_TTY
Stellen Sie die Terminal Farben in der /.bashrc
des Servers
brauchte ich das Gleiche, was mir bewusst zu machen, dass ich auf einem Staging oder Produktionsserver war und nicht in meiner Entwicklungsumgebung, die sehr schwer zu sagen, vor allem, wenn in einer Ruby-Konsole oder etwas.
Um dies zu erreichen, verwenden ich den setterm
Befehl in meinem Server des ~./bashrc
Datei, die die Farben des Terminals inverse beim Anschließen und die Farben wiederherstellen, wenn zu verlassen.
~ / .bashrc
# Inverts console colours so that we know that we are in a remote server.
# This is very important to avoid running commands on the server by accident.
setterm --inversescreen on
# This ensures we restore the console colours after exiting.
function restore_screen_colours {
setterm --inversescreen off
}
trap restore_screen_colours EXIT
Ich habe dies dann in allen ~/.bashrc
Dateien Server, so dass ich weiß, wenn mein Terminal auf einem Remote-Server ist oder nicht.
Ein weiterer Vorteil ist, dass alle Ihre Entwicklung oder DevOps Team den Vorteil dieser erhalten, ohne es Teil des Onboarding-Prozess.
Funktioniert prima.
Sie sollten die Farbe von Benutzername und Host-Computernamen ändern.
fügen Sie die folgende Zeile in der ~/.bash_profile
-Datei:
export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "
Die ersten Teil (lila gefärbt) ist das, was Sie suchen.
Dies ist meine bevorzugten Farben. Sie können jeden Teil der Eingabeaufforderung der Farbe anpassen, indem m
Codes zu ändern (zum Beispiel 34m
), die ANSI sind Farbcodes.
Liste der ANSI-Farbcodes:
- Black: 30m
- Rot: 31m
- Grün: 32m
- Gelb: 33m
- Blue: 34m
- Purple: 35m
- Cyan: 36m
- White: 37m