![用户进出的小 shell 脚本](https://linux22.com/image/195302/%E7%94%A8%E6%88%B7%E8%BF%9B%E5%87%BA%E7%9A%84%E5%B0%8F%20shell%20%E8%84%9A%E6%9C%AC.png)
我需要编写一个小脚本 Shell bash 脚本
任务如下:
“开发一个程序,在一定的时间间隔后输出系统中用户的信息:谁进去了,谁出去了。”
我尝试这样做:
#!/bin/bash
while [ true ]; do
clear
date
who
sleep 5
done
然后我尝试这样:
#!/bin/bash
while [ true ]; do
clear
date
$USER
sleep 5
done
但一切还是一样。只显示日期。(我通过 git bash 在 Windows 上运行)
我究竟做错了什么?
据我了解,我所规定的命令应该简单地显示系统中的人员。但究竟如何推断谁进入、谁离开呢?
我提前感谢您的帮助,我对此很陌生,不太了解,抱歉。
答案1
您可以只跟踪记录登录的文件并过滤输出,例如:
tail -f /var/log/auth.log | egrep "(Accepted publickey|Accepted password|Disconnected from user)"
在 debian 系统上,这将捕获包含密码或公钥的 ssh 登录的所有行,您必须根据需要更改日志文件的路径/名称 (/var/log/auth.log) 和匹配短语。
输出将类似于:
Sep 6 11:43:28 myserver sshd[19052]: Accepted password for myuser from 85.237.30.84 port 43890 ssh2
Sep 6 11:43:29 myserver sshd[19522]: Disconnected from user myuser 85.237.30.84 port 43890
Sep 6 11:43:51 myserver sshd[20287]: Accepted publickey for myuser from 85.237.30.84 port 38334 ssh2: ED25519 SHA256:/****
Sep 6 11:43:57 myserver sshd[20420]: Disconnected from user myuser 85.237.30.84 port 38334
打开 -f 开关tail
可以让您跟踪文件直到您点击,<ctrl>-c
您还可以通过替换tail -f
为cat
读取整个文件来列出日志文件中的所有匹配行。