调用 ssh 时可以改变 $TERM 的值吗?

调用 ssh 时可以改变 $TERM 的值吗?

在我的本地终端上,我有 TERM=konsole-256color,但并非我连接的所有远程机器都有此定义。

是否可以让 ssh 更改远程计算机上的 TERM?无需更改远程计算机上的 .bash* 脚本,只需更改本地桌面上的配置即可?

答案1

我已将以下别名添加到我的 .bashrc 文件中。它使用 O G 的答案,但将其包装在别名中。效果很好 ;)

# Force xterm-color on ssh sessions
alias ssh='TERM=xterm-color ssh'

答案2

2021年6月4日,“允许 ssh_config SetEnv 覆盖 $TERM”已提交给 openssh-portable,听起来好像它会让您设置SetEnv TERM~/.ssh/config例如在Host指令中。(或者大概会在使用此补丁发布版本后立即允许您这样做。)

答案3

人SSH:

     ssh reads ~/.ssh/environment, and adds lines of the format
     “VARNAME=value” to the environment if the file exists and users are
     allowed to change their environment.  For more information, see the
     PermitUserEnvironment option in sshd_config(5).

编辑:

老鼠,我希望它可以在本地,不过,有志者事竟成。man ssh_conf:

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 的配置,这可能会或可能不会满足“无远程文件修改”的要求。

答案4

这是我随便拼凑起来的快速而粗糙的解决方案。我更喜欢更好的。我想我可以使用 shell 脚本。调整TERM值留给读者练习。

# To move into a separate plugin...
function ssh {
   if [[ "${TERM}" = screen* || konsole* ]]; then
     env TERM=screen ssh "$@"
   else
     ssh "$@"
   fi
}

理想情况下,它会做一些事情,比如检查另一端的 TERM,使用这些ControlPersist东西来防止多个连接的长时间延迟。

相关内容