tzl*_*ima 4 linux ssh bash ubuntu
我正在测试一个简单的脚本,该脚本向登录服务器的用户打印欢迎消息。
剧本:
#!/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 "#==================================================#"
Run Code Online (Sandbox Code Playgroud)
我将脚本保存在/etc/update-motd.d/,以便在用户登录后显示该消息。问题是var_user
总是显示为“ root ”,我找不到从用户那里获取用户名的方法。我正在通过 SSH 进行测试。
有人可以帮助我吗?谢谢!:)
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]
Run Code Online (Sandbox Code Playgroud)
我的小脚本在进程树中“搜索”以查找包含用户名的进程。
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"`
Run Code Online (Sandbox Code Playgroud)
用户名现在在 $USERNAME 变量中。
你不能。motd 是一个全局文件,在用户之间共享(它是 /etc/motd),并且仅在重新启动时更新(我猜偶尔会更新一次)。因此,不可能有任何特定于用户或特定于会话的内容。
/etc/profile
相反,添加要由 shell 显示的消息:
if [ -t 1 ] && [ ! -f ~/.hushlogin ]; then
echo "Welcome to $(hostname), $(whoami)!"
echo "$(ddate). Have a nice day."
fi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5235 次 |
最近记录: |