我最近安装了一台运行 RHEL 8.5 的新远程主机。我的其余环境是 RHEL 7.4。当我 ssh 到 RHEL 8.5 主机时,我注意到一件奇怪的事情。看来我的.bashrc
被叫了两次。
这是行为:
- 我使用以下命令从我的网关 ssh 到 RHEL8.5 主机:
ssh -t user@rhel85host "IAM=peaves CONTROL=simulation bash -i"
- 作为调试器,我将“Hello World”作为我的
.bashrc
.我得到以下输出Hello World Hello World
- 我尝试删除
-i
Bash 调用中的 ,但行为相同(Hello World
两次)。
似乎首先创建了 bash shell,但我传递的两个项目导致 bash 再次被调用。
以前有人处理过这个吗?有关 ssh 登录或 bash 调用的任何提示可以使其不执行此操作并像 RHEL 7.4 一样运行吗?
答案1
通过 SSH 传递命令总是通过 shell 运行它,使用例如/bin/bash -c "the command"
.这就是 OpenSSH 一直以来的工作方式(我相信,从第一天起,就是为了模仿 rsh)。
可能发生变化的是 RHEL 编译 bash 的方式——出于某种原因,bash 有一个编译时选项-c
通过 SSH 连接选项运行时是否加载 .bashrc 。 (是的,它专门检查它是否由 sshd 启动。)Debian 启用此模式; Arch 没有;和它听上去像RHEL 已开始启用它。
无法选择退出第一次调用(除非将用户的登录 shell 更改为 bash 以外的其他 shell),但您可以让 .bashrc 设置一个环境变量,告诉它“已经运行一次”。例如:
if [[ $_BASHRC_RUN ]]; then
return
fi
export _BASHRC_RUN=1
然而,.bashrc 通常不是执行昂贵的“登录”任务的正确位置 - 这些任务应该放在 .profile 或 .bash_profile 中,而 .bashrc 最多应该只包含别名或环境变量之类的内容。