在 SSH 中设置特定于用户或组的 MOTD

mur*_*uru 8 ssh motd

我想在每个组/每个用户的基础上禁用或更改 SSH 登录上显示的 MOTD。关于 SuperUser 的这个问题有一个答案,指出我可以Matchsshd_config. 然而,man sshd_config规定:

Match
         ...
         Only a subset of keywords may be used on the lines following a
         Match keyword.  Available keywords are AcceptEnv,
         AllowAgentForwarding, AllowGroups, AllowTcpForwarding,
         AllowUsers, AuthenticationMethods, AuthorizedKeysCommand,
         AuthorizedKeysCommandUser, AuthorizedKeysFile,
         AuthorizedPrincipalsFile, Banner, ChrootDirectory, DenyGroups,
         DenyUsers, ForceCommand, GatewayPorts, GSSAPIAuthentication,
         HostbasedAuthentication, HostbasedUsesNameFromPacketOnly,
         KbdInteractiveAuthentication, KerberosAuthentication,
         MaxAuthTries, MaxSessions, PasswordAuthentication,
         PermitEmptyPasswords, PermitOpen, PermitRootLogin, PermitTTY,
         PermitTunnel, PubkeyAuthentication, RekeyLimit,
         RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
         X11Forwarding and X11UseLocalHost.
Run Code Online (Sandbox Code Playgroud)

我在该列表中看不到任何与 MOTD 相关的内容。事实上,尝试使用该建议会导致sshd由于配置不正确而无法启动。

那么,我可以这样做吗?如果是这样,怎么办?从 SSH 配置还是通过更改生成/打印 MOTD 的任何内容?


更改文件/etc/update-motd.d没有用,因为根据man update-motd

   Executable  scripts in /etc/update-motd.d/* are executed by pam_motd(8)
   as the root user at each login, and this information is concatenated in
   /var/run/motd. 
Run Code Online (Sandbox Code Playgroud)

(我用一个脚本测试了这一点。我的 MOTD 中echo $USER有一个。)root

剩下的就是 PAM 配置。我想可能可以pam_motd在每个组/用户的基础上禁用,但我不确定如何做到这一点。最后一个选项是pam_motd完全禁用并使用pam_exec,但我真的希望它不会发展到这种程度。

Let*_*ety 6

这是每个用户/组 motd 的实现,灵感来自motd 或每个用户的登录横幅

首先注释掉:

session    optional   pam_motd.so  motd=/run/motd.dynamic
session    optional   pam_motd.so
Run Code Online (Sandbox Code Playgroud)

/etc/pam.d/login设置PrintMotd no/etc/ssh/sshd_config

然后,您可以定义每个用户/组消息脚本并将其放入文件夹中,例如:

sudo mkdir -p /etc/mymotd/groups
sudo mkdir -p /etc/mymotd/users
Run Code Online (Sandbox Code Playgroud)

在这些文件夹中,您可以为每个组或用户创建可执行脚本,在标准输出上打印当天的消息。

您可以/etc/profile.d/perUserGroupMotd.sh使用以下几行创建:

gidName=`id -gn`
if [ -e /etc/mymotd/groups/$gidName ]; then
   /etc/mymotd/groups/$gidName
else 
   if [ -e /etc/mymotd/users/$USER ]; then
      /etc/mymotd/users/$USER
   fi
fi
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 file 来启用/禁用消息,然后运行/path/to/script -g $gidName​​or /path/to/script -u $USER,显然有许多不同的可能实现。

关于pam_motd,最后我发现了这两个bug:

由于这些原因,我认为不可能用于pam_motd您的目标。

HUSHLOGIN_FILE指令 in/etc/login.defs应该抑制登录序列期间的所有常见对话,因此即使是上次登录日期,任何输出也会被抑制。

我猜想 motd 的设计目的是为了覆盖系统中的所有用户,因此可以ssh简单pam_motd地为所有用户启用或禁用它。