每个用户的SSH MOTD


17

我想为SSH用户显示横幅(欢迎消息),并为每个用户显示特定的欢迎消息。

Answers:


38

您未指定使用的是SSH服务器。我假设使用OpenSSH。

请注意,SSH标语和MOTD是两件事。

尽管在SSH终端中几乎无法区分,但是它们在SFTP客户端中却具有不同的行为。


MOTD只是在交互式终端上打印的文本。因此,例如,它不会(也不能)发送到SFTP客户端(稍后再介绍)。

MOTD被硬编码到/etc/motdOpenSSH中。您只能使用PrintMotd指令在全局范围内打开/关闭它。

但是,在某些Linux系统上,PrintMotd总是关闭,而MOTD由PAM堆栈打印(而不是使用pam_motd模块)。在这种情况下,您可以通过/etc/pam.d/sshd或将自定义motd=路径作为模块参数将其关闭。


SSH标语是SSH 2.0的特殊功能,以特定的SSH数据包(SSH2_MSG_USERAUTH_BANNER)发送。

这样,即使非终端客户端(如SFTP客户端)也可以对其进行处理并显示给用户。例如,请参见横幅在WinSCP SFTP / SCP客户端中的显示方式

可以sshd_config使用BannerMatch指令为每个用户(或组或其他条件)配置SSH标语:

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

另请参阅为特定用户或ips禁用ssh标语


当然,您也可以为消息/横幅使用自定义实现。只需打印使用自定义逻辑从全局配置文件脚本中选择的消息即可。

与MOTD一样,这不适用于非交互式会话(SFTP等)。

更重要的是,不仅它不起作用,还需要确保仅为交互式终端打印消息。OpenSSH自动为做什么/etc/motd。使用仅对交互式终端执行的全局概要文件脚本,或者根据TERM环境变量的值有条件地打印消息。

如果您为非交互式会话打印消息,则会破坏任何使用严格协议的客户端,例如SFTP或SCP,因为该客户端将尝试将您的文本消息解释为协议消息,从而导致失败。

有关此问题的示例说明,请参见WinSCP SFTP / SCP客户端的文档

(我是WinSCP的作者)


大家好,感谢您的答复,我得到了解决方案,如果我错了,请纠正我。我将此行附加到/ etc / profile文件中。PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP}在添加此行之前,我为/ etc目录下的每个用户创建标题文件。并像motd.root和motd.alex这样的文件对我有用。
user260277 2014年

那也应该这样做。除我的回答外,这仅在交互式终端中有效。它不适用于SFTP等。
Martin Prikryl 2014年

交互式终端是什么意思?
user260277 2014年

这是一个与人类交互的终端(与SFTP会话,SCP会话或用于某些批处理任务的远程执行的非交互终端相反)
Martin Prikryl 2014年

我提供了一些有关横幅的自定义实现的棘手细节。
Martin Prikryl 2014年

9

您也可以将"$HOME/.ssh/rc"文件用于存档您想做的事情

echo "echo Hello World" > /home/pluto/.ssh/rc
ssh pluto@localhost
Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain
Hello World

因此,您可以为每个用户使用一个ssh rc。


嗨,我尝试此操作,但它给出错误消息.ssh / rc:1:.ssh / rc:欢迎:未找到。
user260277 2014年

是我的错,我输入错误,您需要像普通的bash脚本中一样的回声
c4f4t0r 2014年

“ Wolrd”也是一个错字:)
simon 2014年

我收到“ stty:标准输入:设备不适当的ioctl”。
暂停,直到另行通知。

您在.ssh / rc中拥有什么?
c4f4t0r 2014年
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.