Як я можу автоматично змінювати кольори терміналів, коли я ssh на сервері?


14

Я часто входжу на різні сервери через вікно мого терміналу os x.

Я хотів би призначити кольорову схему для різних хостів, щоб мої вікна терміналів було легше розрізнити. Чи можна це зробити автоматично?

Відповіді:


11

Ось повне рішення. Зберігайте список ip-адрес та / або доменів серверів та кольори, які ви хочете для них, зберігати в ~ / .server_colors:

192.168.122.102, Червоні піски
192.168.122.103, Океан
www.foo.com, Трава
foo.com, Трава

Потім додайте цей рядок до ~ / .profile, щоб викрасти команду ssh:

псевдонім ssh = "~ / bin / safe_ssh $ 1"

Потім порівняйте те, що відбувається після @ у вашій цілі ssh, зі своїм списком. Якщо є відповідність, запустіть AppleScript, щоб змінити екран на відповідний колір. Ось ~ / bin / safe_ssh:

#! / бін / баш
ip = `відлуння $ 1 | вирізати -d "@" -f2`
match = `cat ~ / .server_colors | grep $ ip | wc -l`
якщо [$ match -gt 0]
потім
    color = `cat ~ / .server_colors | grep $ ip | вирізати -f2 -d "," `
    osascript ~ / bin / change_terminal_color.scpt "$ color" 2> / dev / null
фі
/ usr / bin / ssh $ 1

І останнє, ось ~ / bin / change_terminal_color.scpt

на ходу аргв
    скажіть програмі "Термінал", щоб встановити поточні параметри вибраної вкладки вікна 1 до (перший набір установок, ім'я яких (пункт 1 аргументу))
кінцевий пробіг

Я взяв більшість цього коду з цієї публікації в блозі .


1
Дуже хороша. У сценарії safe_ssh $ 1 має бути $ @, щоб дозволити передачу додаткових параметрів до SSH. Можливо також дзвінок після ssh для повернення терміналу до типового. Остання остання редакція зробила б це дуже досконалим: підтримка команд SSH, що не містять '@'.
nOw2

2

Так.

Ви використовуєте, наприклад, "екран" і налаштовуєте його: http://www.slac.stanford.edu/comp/unix/package/epics/extensions/iocConsole/screen.1.html

Або вам це вдається, якщо це можливо, на вашому SSH-клієнті.

Ви також можете спробувати це: http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/


2

Рішення @muirbot для мене працює дуже добре. Я трохи вдосконалив це. Я додам його нижче його посади, як тільки у мене буде достатньо репутації.

Замініть рядок

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

Ця зміна дозволяє надати додаткові аргументи вашій команді ssh, наприклад "ssh -p 1111 userName @ host"

Регулярний вираз дозволяє прості ipv4 адреси та доменні імена.

Для подальшої підтримки декількох аргументів змініть останній рядок на

/ usr / bin / ssh $ @


0

Я просто шукав те саме, і знайшов цю статтю:

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

Він використовує скрипт php для зміни термінальних кольорів за допомогою applescript. Ви можете налаштувати відображення різних кольорів для кожного сервера. Для мене це чудово працює, хоча відчуваю бажання переписати на PHP речі в рубін :)

фк


0

Я використовую сценарій, який запускає SSH у xterm windows з різними кольорами bg / fg. Він вибирає кольори на основі хешу імені хоста з кольорового діапазону, так що не потрібно ніякої конфігурації.

Сценарій написаний на Ruby: https://github.com/mickeyil/ssx


0

Якщо ви використовуєте iTerm2, створіть файл із ім’ям ~/bin/ssh-host-color.shіз 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 $@

І додайте у ~/.aliases.shфайл наступний рядок :

alias ssh="~/bin/ssh-host-color.sh $@"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.