Como alterar as cores dos terminais ao conectar-se a hosts SSH

Como alterar as cores dos terminais ao conectar-se a hosts SSH

Então você deseja alterar as cores dos terminais e redefini-las ao sair?

É possível graças a .ssh/config, alias, esetterm

Responder1

  • .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
    

No Bash, agora você pode:

some command

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

# colors changed:
# ....

exit
# colors changed back! yeea!


Alternativa para setterm:

Se você estiver usando gnome-terminal, ou outro xterm, e estiver frustrado com as opções limitadas de cores de setterm, e/ou suas settermalterações estiverem sendo substituídas por códigos de cores em seu prompt de comando [ $PS1], em vez de settermvocê pode querer usar xtermcontrol, conforme demonstrado emesta resposta.

  • Por exemplo, xtermcontrol --bg '#600'tornará o fundo do terminal vermelho escuro, embora possa ser necessário instalá-lo xtermcontrolantes de usá-lo(por exemplo, sudo apt install xtermcontrolem sistemas baseados em Debian)

Responder2

(Leia o gaRexrespostaprimeiro)

settermmudou os argumentos em versões recentes:(mais informações: man setterm)

  • .bash_aliases:
    function ssh_alias() {
      ssh $@;
      setterm --default --clear all;
    }
    
    alias ssh=ssh_alias
    
    Você ainda pode usar --clear reste recarregar .bash_aliasesviaexec bash

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

Responder3

Eu precisava disso ao me conectar aos meus próprios computadores. O que fiz foi tão simples quanto adicionar este trecho ao meu .bash_profile(que está em meus dotfiles, então acaba na maioria dos meus computadores):

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

Você pode alterar 336699para qualquer cor hexadecimal que desejar.

Responder4

No Apple Mac/OSX, settermnão está disponível, mas você pode usar osascriptcom um pequeno script de shell:

#!/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
  • Isso leva um único argumento correspondente a um dos esquemas de cores terminalconhecidos(por exemplo, oceano)e pode ser invocado no lugar das settermrespostas acima, lembrando de adicioná-lo também ~/.bash_aliasespara que o terminal volte ao esquema de cores original quando você sair da sshsessão

O perfil padrão bashno OSX não fonte .bash_aliases, então você pode precisar adicionar algo assim para ~/.bash_profile:

if [ -f ~/.bash_aliases ]; then
  source ~/.bash_aliases
fi
  • Para obter informações adicionais sobre como alterar as cores dos terminais no OSX, consulteesta resposta SO.

informação relacionada