我有应该配置相同的双 Linux 服务器,但是对于需要在 ~/.bashrc 中指定的路径的命令,其中一个的 ssh 命令失败。例如,我可以以pwd
交互方式和通过 ssh 使用命令,但如果我尝试运行位于应用程序 bin 文件夹中的程序,它只能在其中一个服务器的交互式 shell 中运行。
两台服务器上的 /etc/profile 和 /etc/environment 文件是相同的,但是 $BASH_ENV 在正常工作的服务器上设置为 ~/.bashrc。我想在不工作的服务器上设置 $BASH_ENV,但我更愿意将它设置在与工作服务器中设置相同的位置。Linux 在非交互式登录时会在哪些地方运行,例如来自另一台计算机的 ssh 命令?
编辑:用户在 /etc/passwd 中的行在两台服务器上都指定了 /bin/bash。两个服务器的 ~/.bash_profile 文件是相同的,并且包含if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
. 系统之间的唯一区别是 $BASH_ENV 是服务器上不工作的空字符串,我找不到它在工作服务器中的设置位置。
编辑 2:两台服务器上的 ~/.ssh/environment 文件都有 BASH_ENV=~/.bashrc
BASH_ENV
只会通过环境或初始化期间获取的另一个脚本来设置。对于非交互式 shell,如果该 shell 也是登录 shell,它只会尝试获取其他文件。(在这种情况下,它会显示~/.bash_profile
,~/.bash_login
和~/.profile
...但如果这样做,您将不会遇到问题)首先要查看的是调用子shell 的环境。
BASH_ENV
将传递一个导出的变量。请记住,这可能隐藏在源文件中。BASH_ENV=blah /path/to/somecommand.sh
. 这就像拇指酸痛一样突出,所以你可能会抓住它。如果是登录后设置的,但是不知道在哪里设置,可能需要看看是什么负责构建登录环境。
所有由登录 shell 获取的常用文件。
man bash
详尽的清单。PAM:正如评论中所建议的那样,检查
/etc/security/pam_env.conf
以及 . 引用的任何其他文件pam_env.so
。其他 PAM 模块也可能负责,但如果您的 PAM 配置看起来相同,则可能并非如此。sshd:它将按顺序扫描以下文件:
~/.ssh/environment
(在切换到主目录之前;仅当PermitUserEnvironment
在 中启用时sshd_config
)~/.ssh/rc
(更改到主目录后;总是)/etc/ssh/sshrc
(如果~/.ssh/rc
不存在)注意:
sshd
还将扫描environment=value
用户授权密钥文件中的行(如果PermitUserEnvironment
已启用),但从手册页中不清楚该步骤在上述顺序中的位置。