OpenSSH 客户端发送不应该发送的环境变量

OpenSSH 客户端发送不应该发送的环境变量

我的主机没有非标准终端的 termcap 条目,因此我无法添加它们(策略)。

我使用 tmux 将终端类型设置为此设备无法识别的类型。这里没有问题,最坏的情况是我可以将 TERM 设置为“xterm”并完成它。但是:

我已经为 OpenSSH 客户端配置了一些默认设置,除其他设置外,我指示它不要发送除 LANG 和 LC_* 之外的任何环境变量。

~/.ssh/config 的相关部分:

Host *
  SendEnv LANG LC_*

我的OpenSSH客户端版本是6.6.1。

以下是我的 SSH 会话的记录,其中删除了不相关的行:

% TERM=you.shall.not.pass ssh -vvv host
...
debug1: Connection established.
...
debug1: Authentication succeeded (publickey).
...
debug1: Sending environment.
...
debug1: Sending env LANG = en_GB.UTF-8
debug2: channel 0: request env confirm 0
...
debug3: Ignored env TERM

如上所述,它发送了 LANG,写入了它忽略的 TERM,但不知何故它已经传播到远程主机:

root@host% echo $TERM
you.shall.not.pass

您遇到过这种情况吗?这不是什么大问题,但我认为除非我做错了什么,否则这与文档不一致。

答案1

Ssh 本身不会将 TERM 的值作为环境变量传递。用于请求伪终端 (PTY) 的 SSH 协议消息包含一个用于终端类型的字段,以及终端的宽度和高度等内容。请参阅RFC 4254,第 6.2 节

尝试运行没有 PTY 的命令,您可能会得到不同的结果,例如:

$ TERM=foo ssh localhost 'echo $TERM'
dumb

相关内容