¿Cómo cambiar automáticamente el fondo del terminal, basado en el nombre de host ssh?

9

¿Cómo se puede cambiar de forma progmática el color de fondo de una ventana de terminal, en función del nombre de host en el que ssh?

es decir, cuando estoy conectado a sistemas integrados en vivo en hardware de producción, deseo que el fondo del terminal cambie a rojo, para "mantener la conciencia" de en qué servidor estoy. Tener solo el nombre de host en PS1 no siempre es suficiente.

Estoy usando gnome-terminal, pero aceptaría cualquier solución viable bajo Linux.

Mtl Dev
fuente

Respuestas:

7

Puede usar ssh LocalCommand para emitir la secuencia de escape ANSI para cambiar el color de fondo y tener una sección por host (o patrón de host) para seleccionar el color apropiado que desea que corresponda con el host remoto.

Si sus servidores de producción siguen una convención de nomenclatura como "comienza con prod", puede probar el siguiente fragmento en su archivo ~ / .ssh / config: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

Si no existe una práctica convención de nomenclatura para utilizar patrones comodín, puede enumerar los nombres de host separados por espacios. También puede crear bloques de Host adicionales con diferentes valores de color y cadenas para otros servidores que no sean de producción.

Después de conectarse a un host que coincida con el patrón, la impresión correspondiente se ejecutará localmente, cambiando el color de fondo a rojo (el [41m elige rojo como color de fondo, la parte [2J vuelve a pintar toda la pantalla con el color de fondo actualizado. Ver https://en.wikipedia.org/wiki/ANSI_escape_code para muchas más opciones)

La mayor molestia de este enfoque es que el color de fondo persiste al salir de la sesión ssh; No hay una contraparte de LocalCommand que se ejecute al desconectarse (que yo sepa). Un script de alias o shell wrap para ssh podría invocar printf "\x1b[0m"como un reinicio. Por otro lado, tener el color de fondo establecido a través de LocalCommand significa que obtendrá el color establecido incluso si ssh no se ejecuta a través de un script de envoltura o alias.

PKapp
fuente
Excelente respuesta! El único problema que estoy viendo, que sin embargo es importante, es que el cambio de color se mantiene solo para la primera "pantalla". Tan pronto como se ingresan los comandos y la pantalla se desplaza hacia arriba, pasa de rojo a negro. ¿Quizás el control de color gnome-terminal está anulando la secuencia de escape ANSI? ¿Conoces una solución alternativa?
Mtl Dev
¿Es posible hacer algo similar, tal vez a la variable de solicitud PS1 en el host SSH?
Mtl Dev
El restablecimiento puede ser causado por secuencias en la variable de solicitud de PS1 o si tiene comandos como lsalias ls --color=autoe incluye la secuencia de restablecimiento '<ESC> [0m' '. Sin embargo, para persistir, probablemente necesite configurar diferentes perfiles de terminal gnome e ir a la ruta del script de envoltura, seleccionar un nombre de perfil basado en el nombre de host e invocargnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp
Tiene toda la razón: si tengo ls --colourO la secuencia de reinicio en PS1, cualquiera de los dos anulará la configuración de color ansi anterior. Así que analizaré la implementación de su solución de script de envoltura propuesta, que también es una excelente idea. ¡Muchas gracias!
Mtl Dev
Solo para que otros lo sepan: agregar printf a ~ / .ssh / config parece romper rsync. Detalles relacionados aquí: serverfault.com/questions/267154/…
Mtl Dev