我有两个 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
And*_*w B 24
BASH_ENV只能通过环境或在初始化期间获取的另一个脚本进行设置。对于非交互式 shell,如果该 shell 也是登录 shell,它只会尝试获取其他文件。(在这种情况下,它会读取~/.bash_profile,~/.bash_login和~/.profile...但如果它这样做,你就不会遇到问题)
首先要看的是调用子shell的环境。
BASH_ENV将传递导出的变量。请记住,这可能隐藏在源文件中。BASH_ENV=blah /path/to/somecommand.sh. 这就像拇指酸痛一样突出,所以你可能会抓住它。如果是登录后设置的,但是不知道在哪里设置,可能需要看看是什么负责构建登录环境。
由登录 shell 获取的所有常用文件。man bash对于详尽的清单。
PAM:正如 freiheit 在评论中建议的那样,检查/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已启用),但从手册页中并不清楚该步骤在上述顺序中的位置。
| 归档时间: |
|
| 查看次数: |
17862 次 |
| 最近记录: |