last
命令会列出系统上过去成功的登录记录。这些信息存储在/var/log/wtmp
文件中,并且从版本3.17.2开始,gdm
使用它来对用户列表进行排序。
如果您删除/var/log/wtmp
文件然后重新启动,用户列表将恢复为按字母顺序排序。在下一次登录后,您的用户将成为最常用的用户,因此会出现在列表的顶部。
注意:如果您删除/var/log/wtmp
文件,将丢失系统的登录历史记录。您可能希望创建该文件的备份。
已在Ubuntu Desktop 20.04.3和21.04中测试通过
expect
:sudo apt install expect
/root
目录,以保持整洁:sudo su
cd ~
logins.sh
(但您可以根据需要自行命名):vi logins.sh
#!/usr/bin/expect
set timeout 10
set user [lindex $argv 0]
set password [lindex $argv 1]
spawn login $user
expect "Password:"
send "$password\r"
expect "$user@{hostname}:~$"
send "exit\r"
interact
注意:请确保将 {hostname}
替换为您计算机的主机名。
保存文件并退出。
chmod +x logins.sh
./logins.sh nozomi superSecretPassword\!123
注意:除非您与我的狗同名,否则请确保将 nozomi
替换为正确的账户名,将 superSecretPassword\!123
替换为正确的密码。如果您的密码包含 bash 可能误解的字符(例如 !
),请使用 \
进行转义。
如果一切正常,您将看到指定的账户已登录,并在大约 8~10 秒后自动退出。
/var/log/wtmp
添加了记录:last
您应该会看到类似下面的内容:
$ last
nozomi pts/1 Thu Sep 9 00:38 - 00:39 (00:00)
for i in {1 .. 999}; do /root/logins.sh nozomi superSecretPassword\!123; done
注意:请确保将 999
替换为您希望脚本运行的次数。请注意,该数字应大于零,并且每次运行将需要约 10 秒钟才能完成。还请确保将用户名和密码替换为您希望在顶部设置的账户。
for
循环中减少运行次数。请注意,每分钟大约可运行 6 次,1000 次运行将需要约 2 小时 45 分钟的时间才能完成。您可能希望在夜间运行此操作。这在原始的Ubuntu 20.04 LTS和21.04上进行了测试,但应该适用于从(至少)18.04开始的每个版本的Ubuntu。
last
输出中(即/var/log/wtmp
),所以您可以设置公钥登录(~/.ssh/authorized_keys),并使用for i in $(seq 1000); do ssh nozomi@localhost date ; done
来做同样的事情,更简单一些。 - azrdev/proc/$PID/cmdline
中的每个其他本地用户阅读,并且也会被写入您的shell历史记录。 - azrdevlast
命令可以查看SSH登录记录(包括源IP)。您的建议确实可以节省一点输入。 - matigo这种行为过去是在/etc/gdm3/custom.conf
中的[greeter]
部分(Include=
)中配置的 - 但是现在似乎不再起作用(请参见gdm忽略/etc/gdm/custom.conf排除用户列表)。
可能是因为用户azrdev
被GDM3视为系统帐户,因此根本不会显示在用户列表中,或者系统帐户被错误地分类为非系统帐户,因此排在列表的顶部。
如果是这种情况,您可以添加一个名为/var/lib/AccountsService/users/username
的文件,并更改其值。
[User]
SystemAccount=true
last
命令并查看输出,以检查发生了什么。也许另一个用户在过去登录了很多次,并且仍然处于最前面,或者可能是因为某种原因导致/var/log/wtmp
文件被锁定或未更新。 - Alejandro