Laz*_*535 9 ssh environment-variables
我想为我的每台远程机器将 TERM 环境变量设置为不同的值,所以我SetEnv TERM=myTermForRemoteVar
在~/.ssh/config
. 远程机器仍然可以看到TERM=myLocalTermVar
。
我AcceptEnv TERM
在/etc/ssh/sshd_config
远程机器上添加了。仍然没有运气。
我只是为了测试目的而尝试在SetEnv FOO=smth
本地和AcceptEnv FOO
. 这工作得很好,远程机器可以看到FOO=smth
.
是TERM
通过SSH特殊处理?SetEnv
一般适用,但不适用于TERM
. 还有其他人看到这种行为吗?至少没有记录。这是一个错误吗?
dse*_*vec 10
2021 年 6 月 4 日更新: “允许 ssh_config SetEnv覆盖 $TERM”刚刚提交给 openssh-portable。我想这是不是在释放,但我认为,这意味着,在不久的将来十岁上下,我们应该能够覆盖TERM
在~/.ssh/config
!
openssh-unix-dev 上的这个线程似乎表明这TERM
确实很特别,您无法通过SetEnv
. 这是我对事物的阅读:
如该线程所述,当 SSH 客户端从 sshd 请求新的 PTY 时,该请求包含一个显式TERM
值(请参阅RFC4254,“安全外壳 (SSH) 连接协议”,第 6.2 节)。这与客户端希望发送的任何环境变量是分开的。
在 OpenSSH 的ssh.c
, 函数 中ssh_session2_setup
,OpenSSH 无条件地TERM
从您当前的环境中读取 PTY 请求的值,而不考虑任何SetEnv
指令。(您可以看到环境变量,包括来自 的环境变量,SetEnv
在clientloop.c
, function 中client_session2_setup
单独发送。)
然后,在服务器侧,session.c
的do_setup_env
功能设置为在从客户端如何发送它相反的顺序新壳环境:第一它设置环境变量从s->env
,然后将其设置TERM
从PTY请求的TERM
值(s->term
),覆盖任何值forTERM
作为普通环境变量发送。
由于服务器上操作的这个命令,一个SetEnv TERM
将永远的值覆盖TERM
在ssh
客户端的环境,而不是从任何SetEnv
。
在上述线程中,在这方面改变 OpenSSH 的行为似乎有很好的论据,但我认为没有任何行动。该线程中至少有一个人强烈认为远程主机的 init 文件应该在TERM
需要时进行修改。(我个人不同意。)
归档时间: |
|
查看次数: |
1178 次 |
最近记录: |