Comment puis-je changer automatiquement les couleurs des terminaux lorsque je ssh un serveur?

14

Je me connecte fréquemment à différents serveurs depuis ma fenêtre de terminal os x.

Je voudrais attribuer un schéma de couleurs pour différents hôtes afin que mes fenêtres de terminal soient plus faciles à distinguer. Cela peut-il être fait automatiquement?


la source

Réponses:

11

Voici une solution complète. Conservez une liste des adresses IP et / ou des domaines de vos serveurs et les couleurs que vous souhaitez pour eux dans ~ / .server_colors:

192.168.122.102, Red Sands
192.168.122.103, océan
www.foo.com, Grass
foo.com, Grass

Ajoutez ensuite cette ligne à ~ / .profile pour détourner la commande ssh:

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

Comparez ensuite ce qui se trouve après le @ dans votre cible ssh à votre liste. S'il y a une correspondance, exécutez un AppleScript pour changer l'écran à la couleur correspondante. Voici ~ / bin / safe_ssh:

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

Et enfin, voici ~ / bin / change_terminal_color.scpt

on run argv
    dire à l'application "Terminal" de définir les paramètres actuels de l'onglet sélectionné de la fenêtre 1 à (premier jeu de paramètres dont le nom est (élément 1 de l'argv))
moyen détourné

J'ai pris la plupart de ce code dans ce billet de blog .

muirbot
la source
1
Très agréable. Dans le script safe_ssh, le $ 1 doit être $ @ pour permettre le passage de paramètres supplémentaires à SSH. Peut-être aussi un appel après ssh pour ramener le terminal à sa valeur par défaut. Une dernière modification rendrait cela à peu près parfait: le support des commandes SSH ne contenant pas '@'.
nOw2
2

La solution de @muirbot fonctionne très bien pour moi. J'ai apporté quelques petites améliorations à cela. Je l'ajouterai sous son article une fois que j'aurai assez de réputation.

Remplacez la ligne

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

Cette modification permet de donner des arguments supplémentaires à votre commande ssh comme "ssh -p 1111 userName @ host"

L'expression régulière permet des adresses IPv4 et des noms de domaine simples.

Pour prendre en charge plusieurs arguments, changez la dernière ligne en

/ usr / bin / ssh $ @

Vincent Nikkelen
la source
0

Je cherchais juste la même chose et j'ai trouvé cet article:

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

Il utilise un script php pour changer les couleurs des terminaux par applescript. Vous pouvez configurer des mappages de couleurs différentes pour chaque serveur. Fonctionne très bien pour moi, mais ressentez l'envie de réécrire les trucs php en ruby ​​:)

fk

effkay
la source
0

J'utilise un script qui lance SSH dans des fenêtres xterm avec différentes couleurs bg / fg. Il sélectionne les couleurs en fonction du hachage du nom d'hôte à partir d'une plage de couleurs afin qu'aucune configuration ne soit nécessaire.

Le script est écrit en Ruby: https://github.com/mickeyil/ssx

miluz
la source
0

Si vous utilisez iTerm2, créez un fichier nommé ~/bin/ssh-host-color.shavec le contenu 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 $@

Et ajoutez la ligne suivante à votre ~/.aliases.shfichier:

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