8 votes

Changement de couleur du terminal lors d'une connexion ssh à une machine distante et inversement

Je cherche un moyen de changer automatiquement les couleurs du terminal lors d'une connexion ssh à une machine distante et de revenir aux couleurs par défaut en quittant la session ssh. Je veux simplement avoir d'autres couleurs lorsque je travaille sur la machine distante.

Une idée ?

ps : ne pas utiliser iTerm2, mais Terminal.app standard

10voto

jm666 Points 7802

J'utilise ce qui suit.

Il existe une commande shell, appelée myssh avec contenu :

PROFILE="$1";shift;
DEF="Basic" #the default profile name
echo "tell app \"Terminal\" to set current settings of first window to settings set \"${PROFILE}\""|osascript
ssh $@
echo "tell app \"Terminal\" to set current settings of first window to settings set \"${DEF}\""|osascript

et utiliser des alias bash pour la connexion, comme par exemple :

alias ssweb='myssh Homebrew user@web.example.com'
alias ssmail='myssh Ocean me@mail.example.com'

Lorsque je veux me connecter en mode ssh au serveur web, j'écris simplement ssweb dans le Terminal et j'ai obtenu le profil "Homebrew". Lorsque la session ssh se termine, l'AppleScript revient au profil "Basic".

Les alias doivent être placés dans votre $HOME/.profile ou dans un fichier de démarrage similaire.

Les profils "Homebrew", "Ocean", etc. sont les profils de réglage des préférences de Terminal.app. Vous pouvez également configurer différentes polices, encodages, etc.

Bien sûr, vous pouvez l'utiliser directement (sans alias) comme suit :

myssh Pro user@another.machine.example.com
       ^        ^
       |        ssh command arguments
       terminal profile name

3voto

warsong Points 930

Je sais qu'il y a déjà quelques réponses, mais voici une alternative :

Il n'existe pas de méthode générale pour modifier la couleur d'arrière-plan, mais nous pouvons utiliser une méthode standard pour modifier le titre de la fenêtre. Si vous vous connectez à un grand nombre de périphériques qui ne sont pas des "serveurs Unix" (tels que des périphériques réseau : routeurs, commutateurs, pare-feu, etc.), vous devez utiliser leurs interpréteurs de commandes et vous ne pouvez pas installer vos propres variables d'interpréteur de commandes. Voici donc une autre solution :

function ssh() {
  echo -ne '\033[22;0t' # save title
  H=$(echo $@ | sed -e 's/.*@//g;s/ .*//g')
  echo $@ | grep '@' && U=$(echo $@ | sed -e 's/@.*//g;s/.* //g')
  echo -ne "\033]0;${U:=$(whoami)}@${H%%.*}\007"
  unset H
  unset U
  /usr/bin/ssh $@
  echo -ne '\033[23;0t' # restore title
}

Ajoutez ceci à votre .bashrc .

Fondamentalement, comme les fonctions et les alias sont préférés à la recherche dans le chemin, cette commande prend la commande ssh et utilise le texte avant et après le "@" pour définir les variables HOST et USER, qu'elle utilise ensuite pour renvoyer un code ASCII reconnu par le terminal et utilisé pour définir le titre.

Vous devez utiliser "ssh user@host.blah" pour cela et non "ssh -l user host.blah"

Si vous ne fournissez pas de nom d'utilisateur, il sera défini comme votre nom d'utilisateur actuel (évidemment, si vous utilisez un .ssh/config personnalisé (ce que j'utilise beaucoup), cela ne sera pas exact, mais je pense que c'est suffisamment bon pour être utile.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X