¿Cómo puedo cambiar automáticamente los colores del terminal cuando ssh un servidor?

14

Con frecuencia inicio sesión en diferentes servidores desde mi ventana de terminal os x.

Me gustaría asignar un esquema de color para diferentes hosts para que mis ventanas de terminal sean más fáciles de distinguir. ¿Se puede hacer esto automáticamente?


fuente

Respuestas:

11

Aquí hay una solución completa. Mantenga una lista de las direcciones IP y / o dominios de sus servidores y los colores que desea para ellos en ~ / .server_colors:

192.168.122.102, Arenas rojas
192.168.122.103, Océano
www.foo.com, Grass
foo.com, Grass

Luego agregue esta línea a ~ / .profile para secuestrar el comando ssh:

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

Luego compare lo que está después de la @ en su objetivo ssh con su lista. Si hay una coincidencia, ejecute un AppleScript para cambiar la pantalla al color correspondiente. Aquí está ~ / bin / safe_ssh:

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

Y por último, aquí está ~ / bin / change_terminal_color.scpt

en ejecución argv
    dígale a la aplicación "Terminal" que establezca la configuración actual de la pestaña seleccionada de la ventana 1 (primera configuración establecida cuyo nombre es (elemento 1 de argv))
fin de carrera

Tomé la mayor parte de este código de esta publicación de blog .

muirbot
fuente
1
Muy agradable. En el script safe_ssh, el $ 1 debe ser $ @ para permitir que se pasen parámetros adicionales a SSH. Quizás también una llamada después de ssh para devolver el terminal al valor predeterminado. Una última edición lo haría bastante perfecto: soporte para comandos SSH que no contienen '@'.
nOw2
2

La solución de @muirbot funciona muy bien para mí. Hice algunas pequeñas mejoras a eso. Lo agregaré debajo de su publicación una vez que tenga suficiente reputación.

Reemplace la linea

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

Este cambio permite dar argumentos adicionales a su comando ssh como "ssh -p 1111 userName @ host"

La expresión regular permite direcciones IPv4 simples y nombres de dominio.

Para admitir más argumentos múltiples, cambie la última línea a

/ usr / bin / ssh $ @

Vincent Nikkelen
fuente
0

Estaba buscando lo mismo y encontré este artículo:

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

Utiliza un script php para cambiar los colores de la terminal por AppleScript. Puede configurar asignaciones de diferentes colores para cada servidor. Funciona muy bien para mí, aunque siento la necesidad de reescribir las cosas de php en ruby ​​:)

fk

Effkay
fuente
0

Utilizo un script que lanza SSH en ventanas xterm con diferentes colores bg / fg. Selecciona los colores en función del hash del nombre de host de un intervalo de colores para que no se necesite configuración.

El guión está escrito en Ruby: https://github.com/mickeyil/ssx

miluz
fuente
0

Si está utilizando iTerm2, cree un archivo ~/bin/ssh-host-color.shcon el contenido de 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 $@

Y agregue la siguiente línea a su ~/.aliases.sharchivo:

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