Evita que o cliente SSH passe a variável de ambiente TERM para o servidor?

18

Atualmente, estou usando o Fedora 18 gnome- terminal , em seguida, iniciou o multiplexador tmux . Depois que eu me conectei a um servidor CentOS 5 via ssh , eu encontrei:

  • ls result não tem cor
  • tmux , screen , hexedit , htop all falhou ao iniciar com a mensagem de erro como:
    open terminal failed: missing or unsuitable terminal: screen-256color

Parece que ssh passa a variável de ambiente $ TERM para o servidor, mas não consigo encontrá-lo no arquivo /etc/ssh/ssh_config do Fedora 18.

Embora eu possa alterar manualmente a variável $ TERM no servidor, cada vez que me conecto, isso acontece novamente. Então, como evitar isso?

    
por LiuYan 刘研 11.03.2013 / 08:01

4 respostas

17

$TERM é para informar aos aplicativos em que terminal eles estão falando, para que eles saibam como conversar com ele.

Altere-o para um valor suportado pelo host remoto e que corresponda o máximo possível ao seu terminal ( screen ).

A maioria dos sistemas Linux deve ter pelo menos uma entrada screen terminfo. Caso contrário, screen implementa um superconjunto de vt100 e vt100 é universal. Então:

TERM=screen ssh host

ou

TERM=vt100 ssh host

Se você precisar do suporte de 256 cores, tente xterm-256color , que deve estar próximo o suficiente ( screen suporta 256 cores da mesma forma que xterm ) e informe aos aplicativos que seu aplicativo de terminal suporta 256 cores e informe como usá-los.

Ou você pode instalar a entrada terminfo no host remoto.

infocmp -x | ssh -t root@remote-host '
  cat > "$TERM.info" && tic -x "$TERM.info"'
    
por 11.03.2013 / 08:36
8

No meu caso, simplesmente adicionei um alias ao meu .zshrc ( .bashrc se estiver usando o bash) em minha área de trabalho local:

alias ssh='TERM=xterm ssh'

Se você já usa um alias, ajuste-o para incluir a atribuição de ambiente.

    
por 25.04.2014 / 12:17
0

Veja man ssh_config:

 SendEnv
         Specifies what variables from the local environ(7) should be sent
         to the server.  Note that environment passing is only supported
         for protocol 2.  The server must also support it, and the server
         must be configured to accept these environment variables.  Refer
         to AcceptEnv in sshd_config(5) for how to configure the server.
         Variables are specified by name, which may contain wildcard char‐
         acters.  Multiple environment variables may be separated by
         whitespace or spread across multiple SendEnv directives. The
         default is not to send any environment variables.

e man sshd_config:

 AcceptEnv
         Specifies what environment variables sent by the client will be
         copied into the session's environ(7).  See SendEnv in
         ssh_config(5) for how to configure the client.  Note that envi-
         ronment passing is only supported for protocol 2.  Variables are
         specified by name, which may contain the wildcard characters '*'
         and '?'.  Multiple environment variables may be separated by
         whitespace or spread across multiple AcceptEnv directives.  Be
         warned that some environment variables could be used to bypass
         restricted user environments.  For this reason, care should be
         taken in the use of this directive.  The default is not to accept
         any environment variables.

De acordo com isso, o padrão deve ser não enviar nenhuma variável, mas o TERM parece ser especial. É enviado de qualquer maneira.

Portanto, você pode alterar TERM ao chamar ssh (como TERM=xterm ssh ... ), alterá-lo após o login (como em .bash_profile ) ou definir o tipo de TERM desconhecido no lado do servidor (supondo que você tenha acesso root lá). Veja outra resposta para detalhes.

    
por 11.03.2013 / 08:30
0

Eu coloco isso no meu .bashrc no host remoto:

# 256-color mode not supported on this host
if echo $TERM | grep -q -- '-256color'; then
    echo -e '\n\n256-color mode not supported on this host.  Reverting TERM...\n'
    export TERM='echo -n $TERM | sed 's/-256color//''
fi

Dessa forma, xterm-256color e screen-265color são manipulados corretamente. Além disso, tenho a saída da nota para que, se o servidor for atualizado posteriormente e suportar 256 cores, não acabarei batendo minha cabeça contra a parede, imaginando por que minha variável TERM é alterada quando SSHing.

    
por 11.12.2013 / 20:06