$BASH_ENV 通常设置在哪里?

$BASH_ENV 通常设置在哪里?

我有两台 Linux 服务器,应该配置相同,但是其中一台服务器的 ssh 命令对于需要在 ~/.bashrc 中指定的路径的命令失败。例如,我可以通过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

答案1

BASH_ENV只能通过环境或初始化期间获取的另一个脚本进行设置。对于非交互式 shell,只有当该 shell 也是登录 shell 时,它才会尝试获取其他文件。(在这种情况下,它会读取~/.bash_profile~/.bash_login~/.profile……但如果它这样做,您就不会遇到问题)

首先要查看的是调用子 shell 的环境。

  • 导出的BASH_ENV变量将被传递。请记住,这可能隐藏在源文件中。
  • 它可以作为参数在调用脚本的同一行中输入,即BASH_ENV=blah /path/to/somecommand.sh。这很显眼,所以你可能已经注意到了。

如果您登录后设置了它但您无法弄清楚在哪里,则可能需要查看负责构建登录环境的内容。

  • 登录 shell 所获取的所有常用文件。man bash以获取详尽列表。

  • 聚丙烯酰胺:正如 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启用),但从手册页中无法清楚了解该步骤在上述序列中的位置。

相关内容