阻止SSH客户端将TERM环境变量传递给服务器?


20

我目前正在使用Fedora 18 gnome-terminal,然后tmux在其中启动了多路复用器。通过命令连接到CentOS 5服务器后ssh,我发现:

  • ls 结果没有颜色
  • tmuxscreenhexedithtop都未能启动,错误信息,如:
    打开终端失败:终端丢失或不合适:screen-256color

似乎ssh将$ TERM环境变量传递给服务器,但是我在/etc/ssh/ssh_configFedora 18的文件中找不到它。

尽管我可以在服务器上手动更改$ TERM变量,但是每次连接时,它都会再次发生。那么如何预防呢?

Answers:


17

$TERM 告诉应用程序正在与哪个终端通信,以便他们知道如何与之通信。

将其更改为远程主机支持的值,并且该值应与您的终端(screen)尽可能匹配。

大多数Linux系统至少应具有screenterminfo条目。如果不是这样,screen实现的一个超集vt100,并vt100具有普遍性。所以:

TERM=screen ssh host

要么

TERM=vt100 ssh host

如果确实需要256色支持,则可以尝试将xterm-256color其设置得足够接近(screen以相同的方式支持256色xterm),并告诉应用程序您的终端应用程序支持256色并告诉他们如何使用它们。

或者,您可以在远程主机上安装terminfo条目。

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

2
熟悉,infocmp并且tic,一旦编译,就无需$TERM再次进行临时更改。顺便说一句,我刚刚/usr/share/terminfo/s/screen-256color从Fedora 18 复制(rsync)到CentOS,看来工作正常(rsync -tv /usr/share/terminfo/s/screen-256color root@the_host:/usr/share/terminfo/s)。
LiuYan刘研

忘了提及,我tmux在Fedora 18的gnome终端中运行,tmux$TERMscreen-256color从更改为xterm-256color
LiuYan刘研

顺便说一句,ssh可以这种方式工作:获取terminfo所支持的主机/服务器(不推入),然后选择一个客户端可以支持的主机吗?
LiuYan刘研

2
infocmp | ssh -t root@remote-host 'cat > "$TERM.info" && tic "$TERM.info"'可以缩短为infocmp | ssh root@remote-host "tic -"。之所以可行,是因为当您拥有管道时,可以使用-将其作为文件进行访问,幸运的是,管道可以跨SSH运行。
艾伦·詹金斯

1
@starfry,我无法保证tic(terminfo编译器)生成文件的二进制格式在一个系统与下一个系统之间是相同的,或者它们的位置是相同的。tic也可以确保权限正确或在需要的地方创建中间目录。
斯特凡Chazelas

10

就我而言,我只是在本地桌面上为我添加了一个别名.zshrc.bashrc如果使用bash):

alias ssh='TERM=xterm ssh'

如果您已经使用别名,请对其进行调整以包括“环境”分配。


1

我将其.bashrc放在远程主机上:

# 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

这样,两者xterm-256color和都会screen-265color得到正确处理。另外,我输出了注释,以便以后更新服务器并支持256色时,我不会因为想知道为什么SSH时为什么我的TERM变量被更改而撞墙。


或者,不要启动子shell和其他进程:export TERM=${TERM%%-256color}
miken32 '18

1

更改$TERM可能会起作用,但是我不建议这样做,这只是解决方法,而不是解决方案。

当我在系统上遇到此问题时,可以通过为远程系统安装最常见的终端类型的支持来解决此问题:

  • yum install ncurses-base对于screen-256color在CentOS
  • yum install ncurses-term对于screen-256color-bce在CentOS
  • apt install ncurses-base两个screen-256colorscreen-256color-bce在Debian,Ubuntu和薄荷

与ncurses相关的软件包还为许多其他终端提供支持,并且在所有其他大型发行版中也可用。(但是对于我的用例和您的问题,这应该是足够的信息)


0

参见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.

和人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.

据此,默认值应该是不发送任何变量,但是TERM似乎很特殊。无论如何都发送。

因此,您既可以在调用ssh时更改TERM(如TERM=xterm ssh ...),也可以在登录后进行更改(如中的.bash_profile),也可以在服务器端定义未知的TERM类型(假定在那里具有root用户访问权限)。有关详细信息,请参见其他答案。


1
不过,未设置$TERM实际上不会比将其设置为不受支持的值更好。
斯特凡Chazelas

字面上的问题是,如何防止发送TERM。-答:你不能。-是的,他应该将其设置为合适的值。
michas

$TERM暂时更改可能是一种解决方法,但我每次都需要这样做。顺便说一下,似乎两者的CentOS 5和Fedora 18接受信封所有的语言环境变量(LANGLC_*,...)
刘岩刘研
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.