用户登录后,可以通过哪些不同方式向 bash shell 显示消息?

用户登录后,可以通过哪些不同方式向 bash shell 显示消息?

我有一个 CentOS 5.7 VPS,使用 bash 作为 shell,通过 SSH 登录后立即显示品牌问候语。我一直在尝试修改它,但似乎找不到它在通常的地方。到目前为止,我已经查看了该motd文件并检查了sshd_config横幅文件设置。未设置横幅文件。

我还可以在哪里查找登录消息?

答案1

传统unix系统显示/etc/motd在用户成功通过身份验证之后且在调用用户的 shell 之前。在现代系统上,这是由pam_motdPAM 模块完成的,该模块可以配置/etc/pam.conf/etc/pam.d/*显示不同的文件。

/etc/motd如果PrintMotd未关闭该选项,则ssh 服务器本身可能会配置为打印/etc/sshd_config。如果PrintLastLog未关闭,它还可能打印上次登录的时间。

另一条传统消息可能会告诉您是那个You have new mail还是You have mail。在具有 PAM 的系统上,这是由pam_mail模块完成的。某些 shell 可能会打印有关可用邮件的消息。

启动用户的 shell 后,用户的启动文件可能会打印其他消息。对于交互式登录,如果用户的登录 shell 是 Bourne 风格的 shell,请在/etc/profile~/.profile、 plus~/.bash_profile~/.bash_login中查找 bash。对于 zsh 的交互式登录,请查看/etc/zprofile/etc/zlogin/etc/zshrc~/.zprofile~/.zlogin~/.zshrc要交互式登录 csh,请查看/etc/csh.login~/.login

如果用户的登录 shell 是 bash 并且这是非交互式登录,则执行 bash ~/.bashrc(这确实很奇怪,因为~/.bashrc只有当 shell 不是登录 shell 时才会执行交互式 shell)。这可能会成为麻烦的根源;我建议~/.bashrc在 shell 不具有交互性时在顶部添加以下代码片段以解决问题:

if [[ $- != *i* ]]; then return; fi

答案2

有几个:

/etc/motd
/etc/issue
/etc/profile - Could echo the message
/etc/profile.d/* - Would be called from /etc/profile

此外

/etc/bash_bashrc
/etc/.bashrc
/etc/bashrc
$HOME/.profile
$HOME/.bashrc

您可能还必须检查从这些脚本调用的每个程序,因为类似的东西fortune可能会存储它在/usr/share.要隔离它,你可以这样做:

. /etc/profile
. /etc/bash.bashrc
. $HOME/.profile
. $HOME/.bashrc

在Ubuntu上还有一个文件:

/etc/motd.tail

答案3

较新的系统存储 MOTD 组件,/etc/update-motd.d以便可以运行各种宏来自定义 motd,以便在登录时显示更新信息、系统警报等。

将您的自定义添加为另一个文件,优先级从0099

99-footer/etc/motd.tail如果将其固定在末尾就足够并且您不想使用任何宏项目,通常会加载。

答案4

您可以查看/etc/shell,我在那里找到了一条我试图更改的消息。用“#”注释掉是行不通的,您只需删除任何文本并添加您自己的文本即可。当您将空格和新行放入文件中时,也会出现空格和新行。

相关内容