当我们建立 SSH 连接时,如何重现此消息:
上次登录失败:2 月 19 日星期日 03:52:25 自上次成功登录以来,已有 41 次登录尝试失败。
我想在 Ansible 中配置一个 playbook,这将在一组主机中进行此检查。那可能吗?哪个服务负责生成此消息?
如果没有,有人能给我指出一个实现这一目标的好方法吗?我知道我可以从安全日志中获取失败的尝试,但不确切知道如何计算上次成功访问后的数字。
答案1
注意:以下答案假设您不通过 SSH 连接到服务器,但只能通过 Ansible 访问它
可能不是最优雅的解决方案,但希望足够好:
- name: Failed logins since last playbook execution
shell: 'echo $((`lastb | wc -l` - 2)) ; > /var/log/btmp'
解释(抱歉,如果我在这里太明显了……):
lastb
是一个列出不成功登录的命令,其输出基于以下内容/var/log/btmp
`` 是进行命令替换的一种方法,其目的是用命令的输出替换命令,以便它可以成为另一个命令的参数 - 在本例中,是算术运算的双括号,即
$(()))
lastb | wc -l
返回 的行数/var/log/btmp
,但是,我们需要从中减去 2 才能得到我们想要的结果,因为 的倒数第二行/var/log/btmp
是空行,并且最后一行包含时间戳,例如btmp begins Sat Feb 19 18:50:43 2022
最后,为了重置失败的登录计数,我们截断
/var/log/btmp