为非交互式 SSH 命令获取 BASH_ENV

为非交互式 SSH 命令获取 BASH_ENV

我希望获得$BASH_ENV非交互式 ssh 命令的 var 源。

我确实看到了我的 BASH_ENV:

ssh server.example.com env | grep BASH
BASH_ENV=/tmp/set_bash_env_profile

如果我进行简单的 ssh 登录,env | wc -l由于$BASH_ENVenv var,我得到 85,但是如果:

ssh server.example.com env | wc -l
17

我才17...

ForceCommand按照描述在 sshd_config 中尝试过这里但就我而言,SSH_ORIGINAL_COMMAND尚未设置。

答案1

大概你正在设置BASH_ENV你的.bashrc. Bash.bashrc在交互时加载,而不是登录 shell,或者当它是由 rshd 或(在许多发行版中,但它是编译时选项)sshd 调用的登录 shell 时。已经太晚了bash 的实例。直接把命令放到~/.bashrc.

# .bashrc
if [[ $- = *i* ]]; then
  # Commands for interactive use: prompt, aliases, key bindings, etc.
  # Don't set environment variables here, that goes in .profile.
else
  # Commands executed only on remote logins.
  # You can set environment variables here. Do not output anything.
fi

如果您只需要设置环境变量,~/.pam_environment则可以使用它,它用于任何类型的登录。看设置环境变量的最佳发行版/与 shell 无关的方法是什么?

有关通过 SSH 非交互登录时执行命令的其他方法,请参阅通过 ssh 的 sh 启动文件

相关内容