答案1
$TERM
是告诉应用程序它们正在与哪个终端通信,以便它们知道如何与其通信。
将其更改为远程主机支持且尽可能匹配您的终端的值 ( screen
)。
大多数 Linux 系统至少应该有一个screen
terminfo 条目。如果不是,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
于 CentOSyum install ncurses-term
适用screen-256color-bce
于 CentOSapt install ncurses-base
适用screen-256color
于screen-256color-bce
Debian、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 访问权限)。详情请参阅其他答案。