.ssh/environment:变量扩展(PATH=...:$PATH)是否应该起作用?

.ssh/environment:变量扩展(PATH=...:$PATH)是否应该起作用?

我刚刚发现了OpenSSH Server 中的设置~/.ssh/environmentPermitUserEnvironment它非常适合将变量设置为文字字符串;例如:

# host ~/.ssh/environment
PATH=/home/rlue/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
# client
$ ssh host 'echo $PATH'
/home/rlue/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/games

但变量扩展不起作用:

# host ~/.ssh/environment
PATH=/home/rlue/.local/bin:$PATH
# client
$ ssh host 'echo $PATH'
/home/rlue/.local/bin:$PATH

我发现了多个解决该主题的问题,对于变量是否扩展有不同的答案应该工作与否:

上一篇文章的作者说他确认他可以使用与我运行的相同版本的 OpenSSH 服务器(Debian 稳定版上的 1:7.9p1-10+deb10u2),但我严格按照他的指示进行操作,并且我'我仍然得到一个文字$PATHIE,无变量扩展)。

有没有人有一个明确的答案:是否是应该工作,如果是这样,我的配置缺少什么?

答案1

查看源码,相关函数为read_environment_file()session.cchild_set_env()misc.c。这些都是简单的函数 - 只需读取表单的行var=value并设置它们,检查限制和有效性,但不对值进行任何额外的处理。这也是联机帮助页说:

此外,如果文件存在并且允许用户更改其环境,则ssh 会读取~/.ssh/environment并将格式为“ ”的行添加到环境中。VARNAME=value

所以,不,不应该通过文档或代码来实现。

相关内容