尝试在当天的消息打印用户名(MOTD)


2

我正在测试一个简单的脚本,它向在服务器中登录的用户打印欢迎消息。

剧本:

#!/bin/sh
_user=$(whoami)
_hostname=$(hostname)
_currdate=$(date)

echo "#===================================================#"
echo "          Welcome $_user to $_hostname server"
echo "          Curr. time: $_currdate"
echo "          Have a nice day!"
echo " "
echo  "#==================================================#"

我正在保存脚本 /etc/update-motd.d/ ,以便在用户登录后显示该消息。 问题是 变种 _user 总是显得“ “我找不到从用户那里获取用户名的方法。我正在通过SSH测试这个。

有人能帮助我吗? 谢谢! :)

Answers:


4

你不能。 motd是一个 全球 文件,在用户之间共享(它是/ etc / motd),并且仅在重新启动时更新(我猜想偶尔会更新)。因此,不能有任何特定于用户或特定于会话的内容。

而是将您的消息添加到 /etc/profile 由shell显示:

if [ -t 1 ] && [ ! -f ~/.hushlogin ]; then
    echo "Welcome to $(hostname), $(whoami)!"
    echo "$(ddate). Have a nice day."
fi

谢谢你的答案@grawity。我是脚本编程的初学者。你能解释一下我的if声明吗?
tzlima

@tzlima:仔细阅读手册页 test (又名 [ ),或 bash 贝壳。第一个检查是输出是否到终端(以避免混乱 批量 与垃圾邮件的连接);第二个是用户是否选择了 隐藏 通过创造一个 ~/.hushlogin 文件。
grawity

@grawity说它是一个全局文件是不精确的。是的,它是一个全局文件,但它是一个全局文件,由登录的用户读取.OP看到的问题不是它是一个全局文件;问题是当显示motd时,它显示为用户root而不是登录用户。不过,提供的解决方案还可以。一世 认为 在显示motd时,登录用户没有变量。 (我也试图找到它。)
Ray

2

Grawity的答案是不正确的。他说motd是一个全局文件,但OP明确表示他在/etc/update-motd.d/工作。

/etc/update-motd.d/允许动态生成的MOTD,并可以运行实际的脚本或应用程序。

话虽如此,我面临的问题与你一样。问题是在执行MOTD期间,权限尚未下降到用户帐户,因此所有脚本都以root身份运行。

我设法找到适用于Debian机器的解决方案。我没有在其他发行版上尝试过。我的解决方案是从'ps'输出中检索用户名,因为sshd显示了用户名,例如:

root      4179  0.0  0.0  93984  5952 ?        Ss   10:44   0:00 sshd: johndoe [priv] 

我的小脚本在流程树中“搜索”以查找包含用户名的进程。

PPID1=`cat /proc/$PPID/status | grep PPid | awk '{ print $2 }'`
PPID2=`cat /proc/$PPID1/status | grep PPid | awk '{ print $2 }'`
USERNAME=`ps -x | grep $PPID2 | awk '{ print $6 }' |  sed "s/[[:digit:].-]//g"`

用户名现在位于$ USERNAME变量中。


适用于Ubuntu Zesty
Grammargeek

0

以下不会为本地登录工作,但是我的motd不会在我的本地登录中弹出,并且OP正在寻找与SSH相关的解决方案;所以这里是捕获最新用户的用户名的神奇咒语,通过SSH登录到motd脚本中的变量。

_user="$(grep 'sshd' /var/log/auth.log | awk '/Accepted publickey for/{print $9}' | tail -1)"

虽然我不确定当两个或多个用户同时登录时会报告什么;所以不要依赖它来保证安全或隐私。

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.