osx - tunear - ¿Cómo puedo hacer que la ventana del terminal de apple cambie automáticamente la combinación de colores cuando realizo ssh a un servidor específico?
mejores terminales para mac (8)
¿Por qué no cambiar el intérprete de comandos del shell siempre que haya iniciado sesión a través de SSH? Generalmente hay variables de shell específicas: SSH_CLIENT , SSH_CONNECTION , SSH_TTY
Cuando entro en un servidor de producción remoto, me gustaría que el esquema de colores de la ventana de mi terminal cambie a algo brillante y atemorizante, preferiblemente rojo, para advertirme que estoy tocando un servidor de miedo en vivo.
¿Cómo puedo hacer que detecte automáticamente que tengo ssh''ed en alguna parte, y si ese lugar está en alguna lista específica, cambie el esquema de colores?
Quiero actualizar el Esquema de Terminal.app, no sé cómo lo haría en un entorno de linux / unix puro
Los terminales Unix compatibles con Xterm tienen secuencias de escape estándar para configurar los colores de fondo y primer plano. No estoy seguro si Terminal.app los comparte; debería.
case $HOSTNAME in
live1|live2|live3) echo -e ''/e]11;1/a'' ;;
testing1|testing2) echo -e ''/e]11;2/a'' ;;
esac
El segundo número especifica el color deseado. 0 = predeterminado, 1 = rojo, 2 = verde, etc. Por lo tanto, este fragmento, cuando se coloca en un .bashrc compartido, le dará un fondo rojo en los servidores en vivo y un fondo verde en los de prueba. También debe agregar algo como esto para restablecer el fondo cuando cierre la sesión.
on_exit () {
echo -e ''/e]11;0/a''
}
trap on_exit EXIT
EDITAR: Google se convirtió en una forma de establecer el color de fondo con AppleScript . Obviamente, esto solo funciona cuando se ejecuta en la misma máquina que Terminal.app. Puede solucionarlo con un par de funciones de envoltura:
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}"
}
Tendrá que recordar ejecutar sshl en lugar de ssh cuando se conecte a un servidor en vivo. Otra opción es escribir una función de contenedor para ssh que escanea sus argumentos para nombres de host en vivo conocidos y establece el fondo en consecuencia.
Puede establecer la variable $ PS1 en su .bashrc.
red=''/e[0;31m''
PS1="$/[${red}/]"
EDITAR: para hacer esto abre la Terminal. Luego dice
#touch .bashrc
A continuación, puede abrir .bashrc en textEdit o en TextWrangler y agregar los comandos anteriores.
Coloque la siguiente secuencia de comandos en ~/bin/ssh
(asegúrese de que ~/bin/
miró antes de /usr/bin/
en su RUTA):
#!/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 "$@"
La secuencia de comandos anterior extrae el nombre de host de la línea "nombredeusuario @ host" (asume que inicia sesión en hosts remotos con "usuario de ssh @ host").
Luego, dependiendo del nombre de host, establece el fondo rojo (para servidores de producción) o el fondo verde (para el resto). Como resultado, todas sus ventanas ssh serán con fondo de color.
Supongo que aquí su fondo predeterminado es negro, por lo que el script revierte el color de fondo a negro cuando cierra la sesión desde el servidor remoto (consulte "trap on_exit").
Sin embargo, tenga en cuenta que este script no rastrea la cadena de inicios de sesión ssh de un host a otro. Como resultado, el fondo será verde en caso de que inicie sesión en el servidor de prueba primero, luego inicie sesión en producción desde allí.
Una característica menos conocida de Terminal es que puede establecer el nombre de un perfil de configuración en un nombre de comando y seleccionará ese perfil cuando cree un nuevo terminal mediante Shell> Nuevo comando ... o Shell> Nueva conexión remota ....
Por ejemplo, duplique su perfil predeterminado, asígnele el nombre "ssh" y establezca el color de fondo en rojo. Luego use New Command ... para ejecutar ssh host.example.com
.
También coincide en argumentos, por lo que puede hacer que elija diferentes configuraciones para diferentes hosts remotos, por ejemplo.
Aquí hay una solución combinada basada en un par de respuestas existentes que maneja la salida. También incluye un poco más si no desea tratar con valores de color de 16 bits.
Esto debe colocarse en su ~ / .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 - toma 4 (8 bit) valores de color
- set_bg_from_hex - toma 4 valores hexadecimales. la mayoría de mis referencias de color que uso están en hexadecimal, así que esto me lo facilita. Se podría tomar un paso más para analizar realmente #RRGGBB en lugar de RR GG BB, pero funciona bien para mí.
- ssh - envolviendo el comando ssh predeterminado con cualquier lógica personalizada que desee. La instrucción if se usa para manejar la salida para restablecer el color de fondo.
Otra solución es establecer los colores en el archivo de configuración ssh:
dentro ~ / .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}"
Las respuestas combinadas 1 y 2 tienen lo siguiente:
Cree el archivo ~/bin/ssh
como se describe en 1 con el siguiente contenido:
#!/bin/sh
# https://.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 "$@"
Hazlo ejecutable: chmod +x ~/bin/ssh
.
File ~/Dropbox/macCommands/StyleTerm.scpt
tiene el siguiente contenido:
#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
Las palabras Basic, Homebrew, Ocean, Novel, Grass
son de la configuración de terminal de mac os cmd,: