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


21

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

是否可以使ssh更改远程计算机上的TERM?仅通过更改本地桌面上的配置,而无需更改远程计算机上的.bash *脚本?

Answers:


9

我已将以下别名添加到我的.bashrc文件中。它使用OG的答案,但将其包装为别名。奇迹般有效 ;)

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

如果我在终端上使用ssh,则此方法有效。但是我也有几个运行ssh的脚本,并且别名没有为它们扩展。有什么办法可以避免为它们分别设置别名?
Thayne

如果您的脚本需要特定的TERM值,我认为最好在脚本本身中设置该变量。还是那不是一种选择?
约翰·约翰(Johan)

那实际上不是一个选择。同样,这些脚本根据一些参数选择服务器,并打开与该服务器(或tmux会话中可能的服务器)的ssh会话,这些脚本本身不依赖于TERM值。
Thayne

在这种情况下,您可以在脚本中包含bash配置文件或单独的别名脚本,其中包括:shopt -s expand_aliases; 来源〜/ .bash_aliases
Johan

7
TERM=vt100 ssh some.host.name

在远程上,执行echo $ TERM


我虽然对此有所了解,但是我只希望它为ssh所连接的主机子集设置,因此始终发布TERM = ... ssh将不起作用。并记住哪些主机具有旧的termcap信息,然后即时更改命令也不是一件好事。

仅在/ etc / ssh / ssh_config中支持按主机配置,但是我知道没有配置值可以支持每个主机的终端模式映射。
OG

我也知道,它也可以在〜/ .ssh / config中完成,但是我也找不到任何修改发送到远程服务器的环境的选项。希望我错过了一些东西。

7

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).

编辑:

老鼠,我希望它可以在本地,但是,如果有意愿,那就有办法了。人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的配置,这可能会或可能不会满足“不进行远程文件修改”的要求。


1
是的,但这是远程端的配置,我需要/想要一些仅在本地端更改的内容。

4
SendEnv无关。它可能可以发送其他env变量,但是:1.无法修改它们,并且2.仍然发送TERM,即使未在SendEnv中列出。

5

这是我刚刚提出的快速又肮脏的解决方案。我希望有更好的东西。我想我可以改用Shell脚本。调整TERM值留给读者练习。

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

理想情况下,它将执行诸如检查另一端的TERM之类的操作,使用这些ControlPersist填充物来防止多个连接的长时间延迟。


谢谢!我做了类似的事情,但是我没有$TERM使用if/ else构造检查特定的值,而是使用$(echo -n "$TERM" | sed -e s/tmux/screen/)无条件地用更普遍接受的“屏幕”类型替换本地术语中有问题的“ tmux”(本文来源)。
Wincent 2015年
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.