用户登录后,可以在bash shell中显示消息的不同方式是什么?


14

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

我还能在哪里寻找登录消息?


1
你可以尝试递归grep/etc该消息的某个子集。
凯文(Kevin)

@Kevin等待,您在Twitter上关注我吗?我只是在想我正在使用grep -r查找某些内容。除了我是一个doofus并决定在/ =开始)
韦斯利

我也从这里开始/,永远花在1TB磁盘上,让我告诉你...但是我从来没有去过Twitter :)
Kevin Kevin

@WesleyDavid您可以张贴屏幕截图吗?
Karlson

Answers:


22

传统的UNIX系统/etc/motd在用户成功通过身份验证之后以及调用用户的外壳程序之前显示。在现代系统上,这是通过pam_motdPAM模块完成的,该模块可以配置为显示其他文件/etc/pam.conf/etc/pam.d/*在其中显示。

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

另一种传统的消息可能会告诉你是否是You have new mailYou have mail。在具有PAM的系统上,这是由pam_mail模块完成的。某些外壳可能会打印有关可用邮件的消息。

启动用户的外壳程序之后,用户的启动文件可能会打印其他消息。对于交互式登录,如果用户的登录shell是Bourne风格的外壳,看着/etc/profile~/.profile~/.bash_profile~/.bash_login为庆典。对于交互式登录zsh的,看在/etc/zprofile/etc/zlogin/etc/zshrc~/.zprofile~/.zlogin~/.zshrc。要以交互方式登录csh,请查看/etc/csh.login~/.login

如果用户的登录shell是bash,并且这是非交互式登录,则执行bash ~/.bashrc(这很奇怪,因为~/.bashrc只有在交互式shell并非登录shell的情况下才对交互式shell执行bash )。这可能会带来麻烦。~/.bashrc如果外壳不是交互式的,我建议在其顶部包含以下代码片段以纾困:

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

这是我的.bash_profile中的一系列回显。> _ <这个问题与原始问题无关,但是:在.bash_profile中回显内容似乎不是一种发送消息的糟糕方法吗?如果您只想向单个用户发送消息,可能会更好。毕竟,这是根帐户。再说一次,我是一个菜鸟,所以我不能太过挑剔地判断事情。
韦斯利2012年

@WesleyDavid回声.bash_profile只是向自己发送一条消息。有些人在登录时喜欢看到有用或有趣的消息。由于我既不知道消息的内容,也不知道所涉及的人员和环境,因此我无法代表您系统的root帐户。
吉尔斯(Gilles)'所以

在Mac OS X上将消息放入/ etc / motd即可,这是我所需要的。感谢那。
dgig

8

有一些:

/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

1
/etc/issue通常是用户登录之前显示,而不是之后显示。
克里斯·

谢谢!不知道profileprofile.d。las,您的所有四个建议都没有成立。我想知道是否将某些自定义内容编译到bash二进制文件中...?
韦斯利2012年

@ChrisDown对,但我不知道在显示提示后会在屏幕上放置任何内容的任何系统。
卡森(Karlson)2012年

@WesleyDavid我已经修改了答案。
Karlson

非常感谢您提供的所有信息!这给了我很多学习Shell可以向TTY会话发送信息的方式的方式。=)
Wesley

3

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

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

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


1

您可以查看/etc/shell,这是我找到要更改的消息的地方。用“#”注释掉是行不通的,您只需要删除任何文本并添加您自己的文本即可。当您在文件中放置空格和换行时,它们也会出现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.