ssh 登录时加载脚本(非交互式)

ssh 登录时加载脚本(非交互式)

我正在尝试加载环境模块从非交互式远程会话,并相应地设置环境变量。

例如,在我的 bashrc 中我通常调用

module load /path/to/cmake/3.x.x

当我从登录 shell 运行“cmake --version”时,我会看到

cmake v3.x.x

但是,当我使用非交互式远程会话运行它时,我看到 cmake v2.xxx 是默认值。

ssh me@machine 'cmake --version'

为了解决这个问题,我尝试将 /etc/ssh/sshd_config 更新为“PermitUserEnvironment yes”

在我的 ~/.ssh/environment 文件中,我可以相应地设置环境变量,并更新我的 $PATH。这有效,当通过 ssh 远程运行命令时,我可以看到我的路径已更新。即

ssh me@machine 'echo $PATH'

我还创建了一个 ~/.ssh/rc 文件,我可以确认它确实被调用了。但是,即使我输入了相同的“module load /path/to/cmake/3.xx”,我仍然看到它在加载 v2。如果我更新并导出 .ssh/rc 中的 PATH,情况也是如此。它会更新,但似乎正在将其应用于与远程使用的 shell 不同的 shell。

我不明白为什么 ~/.ssh/environment 会修改当前 shell 的内容,而 ~/.ssh/rc 却会修改看似不同的 shell 的内容。

关于如何使用的任何想法环境模块远程?

谢谢

答案1

根据我的经验,当然在 RHEL 和 Fedora 中,~/.bashrc 确实会在您提到的那种“非交互式”SSH 连接中运行。我还使用模块系统(在 RHEL 上),当我通过 SSH 执行命令时,从我的 ~/.bashrc 加载模块没有任何问题。

根据 UNIX/Linux StackExchange 网站上的以下问题/答案,一些发行版在其默认 .bashrc(来自 /etc/skel)中包含代码,用于在非交互时中止 - 您的发行版顶部附近是否有类似的东西?其中也有讨论,似乎证实了 bash 从 SSHD 运行时将运行 ~/.bashrc。

https://unix.stackexchange.com/questions/257571/why-does-bashrc-check-whether-the-current-shell-is-interactive

相关内容