通常在哪里设置$ BASH_ENV?


19

我有两个应该配置相同的Linux服务器,但是其中一个命令要求在〜/ .bashrc中指定路径的ssh命令失败。例如,我既可以pwd交互方式也可以通过ssh 使用命令,但是如果我尝试运行位于应用程序bin文件夹中的程序,则该程序仅在其中一台服务器的交互式外壳程序中有效。

两台服务器上的/ etc / profile和/ etc / environment文件相同,但是在正常运行的服务器上,$ BASH_ENV设置为〜/ .bashrc。我想在不工作的服务器上设置$ BASH_ENV,但我希望将其设置在与工作服务器相同的位置。在非交互式登录(例如来自另一台计算机的ssh命令)时,Linux将在哪些位置运行?

编辑:/ etc / passwd中用户的行在两台服务器上都指定了/ bin / bash。两台服务器的〜/ .bash_profile文件是相同的,并且包含if [ -f ~/.bashrc ]; then . ~/.bashrc; fi。系统之间的唯一区别是$ BASH_ENV是服务器上不工作的空字符串,而且我找不到在工作中的服务器上设置的位置。

编辑2:两台服务器上的〜/ .ssh / environment文件具有BASH_ENV =〜/ .bashrc


1
两台服务器上的/ etc / passwd是否相同?如果bash被称为“ / bin / sh”而不是“ / bin / bash”,它将不会读取任何bashrc文件(仅配置文件)。
自由报

不完全相同,但是我正在发送命令的用户在两个系统上的/ etc / passwd中具有相同的行。
罗勒

那么〜/ .profile和〜/ .bash_profile呢?
2014年

它们是相同的,并且都包含if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
罗勒(Basil),2014年

您已验证/ etc / bashrc和/etc/profile.d/*是否相同?〜/ .bash_login?/etc/pam.d/*?/etc/security/pam_env.conf?
2014年

Answers:


21

BASH_ENV只能通过环境或初始化期间来源的另一个脚本来设置。对于非交互式外壳,如果该外壳也是登录外壳,它将仅尝试获取其他文件。(在这种情况下,它将显示为~/.bash_profile~/.bash_login~/.profile...,但是如果这样做,则不会遇到问题)

首先要看的是在其中调用subshel​​l的环境。

  • 导出的BASH_ENV变量将通过。请记住,这可能埋在源文件中。
  • 可以在调用脚本的同一行上将其作为参数输入BASH_ENV=blah /path/to/somecommand.sh。这很像拇指酸痛,所以您可能会被抓住。

如果是在登录后设置的,但无法确定位置,则可能需要查看负责构建登录环境的原因。

  • 由登录外壳程序获取的所有常用文件。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已启用),但是从手册页中尚不清楚该步骤按上述顺序位于何处。


我发现了差异!PermitUserEnvironment yes在工作服务器上的/ etc / ssh / sshd_config中设置,但不是问题之一。我更改了它,但是我只是测试了一个命令,但它不再起作用。每次尝试ssh输入时,都会对该文件进行解析吗?我没有正在使用的用户的〜/ .ssh / rc,而且两个系统上都没有/ etc / ssh / sshrc文件。
罗勒

哦,我想我需要重新初始化ssh吗?/etc/init.d/sshd?
罗勒

@Basil是的,您需要重新启动sshd。这也意味着工作服务器上可能有一个文件sshd正在设置环境(请检查我为您提供的文件列表)。
安德鲁B

是的,那是令人沮丧的部分-我需要的所有东西都在.bashrc中设置,而这还没有运行:)非常感谢您的帮助-我正在安排更改以重新初始化SSH,我将报告。我认为它会工作。
罗勒

我刚刚完成了SSH的重新初始化,并且我的非交互式SSH命令现在可以使用了!非常感谢您的帮助,我永远不会独自找到该字段。
罗勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.