路径因连接到容器的方式而异



我有一个Alpine docker容器,根据我使用ssh连接的方式,路径不同。如果我使用PTY外壳进行连接:

ssh root@localhost sh -lc env | grep PATH

这个打印:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

但是,如果不使用这个外壳:

ssh root@localhost sh -c env | grep PATH

这个打印:

PATH=/bin:/usr/bin:/sbin:/usr/sbin

为什么会发生这种情况?我需要做什么才能使第二个命令产生与第一个命令相同的输出?

使用sh -l启动登录shell:

当作为交互式登录shell或带有--login选项的非交互式shell调用时,它首先尝试按顺序读取和执行/etc/profile和~/.profile中的命令。--noprofile选项可用于禁止此行为

使用名称sh调用的非交互式shell不会尝试读取任何其他启动文件。

来源https://linux.die.net/man/1/sh

也就是说,您可能可以编辑配置文件,使登录shell的行为类似于noprofile,但反过来可能会变得困难。

我会回答我自己的问题。这个堆栈溢出帖子提供了所需的主要信息:在Alpinelinux中,在哪里设置系统默认环境变量?

鉴于此,有两种选择:

  • 使用DockerfileENV选项声明PATH

  • 或者将PermitUserEnvironment yes添加到sshd_config文件中,并在~/.ssh/environment中定义PATH

相关内容

  • 没有找到相关文章

最新更新