Как изменить цвета терминала при подключении к SSH-хостам

Как изменить цвета терминала при подключении к SSH-хостам

Итак, вы хотите изменить цвета терминала и сбросить их при выходе?

Это возможно благодаря .ssh/config, alias, иsetterm

решение1

  • .bash_aliases:
    function ssh_alias() {
      ssh "$@";
      setterm -default -clear rest;
      # If `-clear rest` gives error `setterm: argument error: 'rest'`, try `-clear reset` instead 
    }
    
    alias ssh=ssh_alias
    
  • /etc/ssh/ssh_config:
    # Ensure this line exists:
      PermitLocalCommand yes
    
  • .ssh/config:
    Host your.production.host
      User root
      LocalCommand setterm -term linux -back red -fore white -clear rest
    

В Bash теперь вы можете:

some command

# all in default colors:
  ssh your.production.host

# colors changed:
# ....

exit
# colors changed back! yeea!


Альтернативой setterm:

Если вы используете gnome-terminal, или другой xterm, и вас раздражает ограниченный выбор цветов setterm, и/или ваши settermизменения переопределяются цветовыми кодами в командной строке [ $PS1], вместо этого settermвы можете использовать xtermcontrol, как показано вэтот ответ.

  • Например, xtermcontrol --bg '#600'сделает фон терминала темно-красным, хотя xtermcontrolперед использованием вам может потребоваться установить его.(например, sudo apt install xtermcontrolв системах на базе Debian)

решение2

(Читайте gaRex'sответпервый)

settermизменил аргументы в последних версиях:(больше информации: man setterm)

  • .bash_aliases:
    function ssh_alias() {
      ssh $@;
      setterm --default --clear all;
    }
    
    alias ssh=ssh_alias
    
    Вы по-прежнему можете использовать --clear restи перезагружать .bash_aliasesчерезexec bash

  • .ssh/config:
    Host myproject.pro
      HostName myproject.com
      User root
      IdentityFile ~/.ssh/myproject
      LocalCommand setterm --term linux --background white --foreground black --clear all
    

решение3

Мне это было нужно при подключении к моим собственным компьютерам. Я просто добавил этот фрагмент в свой .bash_profile(который находится в моих dotfiles, так что он в любом случае оказывается на большинстве моих компьютеров):

[ -n "$SSH_CONNECTION" ] && echo -e "\033]11;#336699\a"

Вы можете изменить 336699шестнадцатеричный цвет на любой желаемый.

решение4

На Apple Mac/OSX settermэта функция недоступна, но ее можно использовать osascriptс помощью небольшого скрипта оболочки:

#!/bin/sh

DEFAULT_SCHEME=Basic
SCHEME=${1:-$DEFAULT_SCHEME}
SAFE_SCHEME=\"${SCHEME//\"/}\"  # sanitize user input

/usr/bin/osascript <<EOF
tell application "Terminal"
  set current settings of window 1 to settings set $SAFE_SCHEME
end tell
EOF
  • Это принимает один аргумент, соответствующий одной из terminalизвестных цветовых схем.(например, Океан)и может быть вызван вместо settermв ответах выше, не забыв также добавить его в , ~/.bash_aliasesчтобы терминал возвращался к исходной цветовой схеме при выходе из sshсеанса

Профиль по умолчанию bashв OSX не использует source .bash_aliases, поэтому вам может потребоваться добавить что-то вроде этого ~/.bash_profile:

if [ -f ~/.bash_aliases ]; then
  source ~/.bash_aliases
fi
  • Дополнительную информацию о том, как изменить цвета терминала в OSX, см.этот ТАК ответ.

Связанный контент