![用户登录后,可以通过哪些不同方式向 bash shell 显示消息?](https://linux22.com/image/21175/%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E5%90%8E%EF%BC%8C%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E5%93%AA%E4%BA%9B%E4%B8%8D%E5%90%8C%E6%96%B9%E5%BC%8F%E5%90%91%20bash%20shell%20%E6%98%BE%E7%A4%BA%E6%B6%88%E6%81%AF%EF%BC%9F.png)
我有一个 CentOS 5.7 VPS,使用 bash 作为 shell,通过 SSH 登录后立即显示品牌问候语。我一直在尝试修改它,但似乎找不到它在通常的地方。到目前为止,我已经查看了该motd
文件并检查了sshd_config
横幅文件设置。未设置横幅文件。
我还可以在哪里查找登录消息?
答案1
传统unix系统显示/etc/motd
在用户成功通过身份验证之后且在调用用户的 shell 之前。在现代系统上,这是由pam_motd
PAM 模块完成的,该模块可以配置/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,以便在登录时显示更新信息、系统警报等。
将您的自定义添加为另一个文件,优先级从00
到99
99-footer
/etc/motd.tail
如果将其固定在末尾就足够并且您不想使用任何宏项目,通常会加载。
答案4
您可以查看/etc/shell
,我在那里找到了一条我试图更改的消息。用“#”注释掉是行不通的,您只需删除任何文本并添加您自己的文本即可。当您将空格和新行放入文件中时,也会出现空格和新行。