Empêcher le client SSH de transmettre la variable d'environnement TERM au server?

J'utilise actuellement Fedora 18 gnome-terminal , puis tmux commencé le multiplexeur tmux . Après avoir connecté à un server CentOS 5 via la command ssh , je trouve:

  • ls résultat n'a pas de couleur
  • tmux , screen , hexedit , htop tout n'a pas pu démarrer avec un message d'erreur comme:

    Echec du terminal ouvert: terminal manquant ou inadapté: screen-256color

Il semble que ssh transmette la variable d'environnement $ TERM au server, mais je ne la trouve pas dans le file /etc/ssh/ssh_config de Fedora 18.

Bien que je puisse changer manuellement la variable $ TERM sur le server, chaque fois que je me connecte, cela se reproduit. Alors, comment l'empêcher?

$TERM est de dire aux applications à quel terminal ils parlent afin qu'ils sachent comment lui parler.

Changez-le en une valeur prise en charge par l'hôte distant et qui correspond le plus possible à votre terminal ( screen ).

La plupart des systèmes Linux devraient au less avoir une input terminfo d' screen . Sinon, screen implémente un sur-set de vt100 et vt100 est universel. Alors:

 TERM=screen ssh host 

ou

 TERM=vt100 ssh host 

Si vous avez besoin du support 256 colors, vous pouvez essayer xterm-256color qui devrait être suffisamment proche (l' screen supporte 256 colors de la même façon que xterm ) et dire aux applications que votre application supporte 256 colors et leur indiquer comment les utiliser.

Ou vous pouvez installer l'input terminfo sur l'hôte distant.

 infocmp -x | ssh -t root@remote-host ' cat > "$TERM.info" && tic -x "$TERM.info"' 

Dans mon cas, j'ai simplement ajouté un alias à mon .zshrc ( .bashrc si .zshrc bash) sur mon bureau local:

 alias ssh='TERM=xterm ssh' 

Si vous utilisez déjà un alias, ajustez-le pour inclure l'affectation d'environnement.

Voir l'homme 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. 

et l'homme sshd_config:

  AcceptEnv Specifies what environment variables sent by the client will be copyd 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 ressortingcted user environments. For this reason, care should be taken in the use of this directive. The default is not to accept any environment variables. 

Selon cela, la valeur par défaut ne devrait pas être d'envoyer des variables, mais TERM semble être spécial. C'est envoyer quand même.

Par conséquent, vous pouvez soit changer TERM en appelant ssh (comme TERM=xterm ssh ... ), le modifier après la connection (comme dans .bash_profile ) ou définir le type de TERM inconnu sur le server (en supposant que vous y avez access root). Voir l'autre réponse pour plus de détails.

Je mets ceci dans mon .bashrc sur l'hôte distant:

 # 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 

De cette façon, xterm-256color et screen-265color sont gérés correctement. En outre, je l'ai sortir la note de sorte que si le server est mis à jour plus tard et prend en charge 256 colors, je ne vais pas me cogner la tête contre le mur en me demandant pourquoi ma variable TERM est changé lorsque SSHing.