防止登录时获取“/etc/profile.d”

防止登录时获取“/etc/profile.d”

我刚刚注意到我的环境行为异常,因为在某些时候这个别名被引入 /etc/profile.d/vim.sh

$ command -v vim
alias vim='__vi_internal_vim_alias'

浏览 中的文件/etc/profile.d,它们对我来说没有用,因为我需要的一切都已经在我的 .bashrc.因此,Bash 在登录后开始处于不必要的污染状态。我希望 Bash 完全忽略该目录并只执行.bashrc.然而,正如联机帮助页所述,在继续使用用户控制的 rc 文件之前,它将盲目地获取该路径中的所有内容。

这是一个公司环境,因此我无法控制操作系统,只能控制我的用户帐户。

有一个选项--noprofile,但我似乎无法将其添加到 passwd 中:

$ chsh
Changing shell for philipp.
New shell [/bin/bash]
> /bin/bash --noprofile
chsh: "/bin/bash --noprofile" does not exist

通过 SSH,我可以bash --noprofile手动添加,但这变得很乏味,因为在正常工作日中我有数十个甚至数百个 SSH 连接。

如果我能让 Bash 忘记顶部的那些设置.bashrc,然后继续使用干净的环境,那就没问题了。我希望避免的是必须用任何/etc/profile.d可能添加到我正在使用的所有系统上的定义来玩打地鼠游戏。

答案1

我想你可能不走运。 chsh将您可以选择的 shell 限制为 中列出的 shell /etc/shells,并且您不能指定命令行参数。

您唯一可以研究的就是尝试 中列出的其他 shell /etc/shells,以防它们无法读取/etc/profile.d,但如果这有效,我会感到惊讶。您还可以尝试unalias -a在配置文件脚本的顶部清除所有定义的别名。

答案2

感谢您的提示“通过 SSH 我可以手动添加 bash --noprofile”。我发现可以将其添加到本地 ~/.ssh/config 文件中,这使其透明,以避免“手动......乏味”的部分。例如,

# ~/.ssh/config

host myserver
hostname myserver.domain.com
user myname
# Uncomment to choose whether to use login shell or not.
#RemoteCommand bash --login
#RemoteCommand bash --noprofile
RemoteCommand bash
RequestTTY yes

更多详细信息请参见https://superuser.com/questions/1224938/ssh-host-is-a-login-shell-but-ssh-host-command-is-not

相关内容