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

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

我目前正在使用软呢帽18gnome 终端,然后开始tmux多路复用器在其中。当我连接到一个中央操作系统通过命令5服务器ssh,我发现:

  • ls结果没有颜色
  • tmuxscreenhexedithtop全部无法启动,错误消息如下:
    打开终端失败:缺少或不合适的终端:screen-256color

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

虽然我可以手动更改服务器上的 $TERM 变量,但每次连接时,这种情况都会再次发生。那么如何防止这种情况发生呢?

答案1

$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

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

alias ssh='TERM=xterm ssh'

如果您已使用别名,请将其调整为包含环境分配。

答案3

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

当我在系统上遇到此问题时,我通过在远程系统上安装对最常见终端类型的支持来修复它:

  • yum install ncurses-base适用screen-256color于 CentOS
  • yum install ncurses-term适用screen-256color-bce于 CentOS
  • apt install ncurses-base适用screen-256colorscreen-256color-bceDebian、Ubuntu 和 Mint

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

答案4

请参阅 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 访问权限)。详情请参阅其他答案。

相关内容