You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Fail2ban捕获SSH成功连接并将用户昵称写入auth.log

如何通过Fail2ban捕获SSH成功连接并将用户昵称写入auth.log

没问题,这个需求完全可以实现!咱们通过自定义Fail2ban过滤器、动作和规则来搞定,一步步来:

1. 创建自定义过滤器,匹配SSH成功连接日志并提取昵称

首先,我们需要一个过滤器来识别SSH成功连接的日志行,同时提取你在authorized_keys里写的昵称。

在/etc/fail2ban/filter.d/目录下新建一个文件ssh-accept.conf,内容如下:

[Definition]
# 匹配SSH成功连接的日志行,捕获末尾的昵称(假设昵称无空格)
failregex = Accepted publickey for root from <HOST> port \d+ ssh2: .* (\S+)$
ignoreregex =

小贴士:如果你的昵称包含空格,可以把正则里的(\S+)改成(.*)$,不过这样可能会捕获到日志行末尾的其他内容,建议优先用无空格的昵称。

2. 创建自定义动作,执行日志写入命令

接下来,定义一个Fail2ban动作,用来调用logger命令把昵称写入/var/log/auth.log。

在/etc/fail2ban/action.d/目录下新建ssh-log-nickname.conf,内容:

[Definition]
# 不需要启动/停止/检查动作,只需要在"封禁"时执行日志写入(这里的封禁只是触发动作,不是真的拉黑)
actionstart =
actionstop =
actioncheck =
# 用logger写入日志,%(matches[1])是过滤器捕获的昵称,%(time)s是时间戳
actionban = logger -p auth.info "%(time)s Accepted SSH connection from %(matches[1])s"
actionunban =

3. 配置Fail2ban规则(Jail)

现在把上面的过滤器和动作组合成一个可用的规则,编辑/etc/fail2ban/jail.local(如果没有就新建这个文件,不要直接改默认的jail.conf),添加以下内容:

[ssh-accept]
enabled = true          # 启用这个规则
filter = ssh-accept     # 使用我们刚才创建的过滤器
logpath = /var/log/auth.log  # 监控的日志文件
maxretry = 1            # 每一次成功连接都触发动作
bantime = 1             # 封禁时间设为1秒(只是走个流程,不会真的限制用户)
findtime = 1            # 匹配时间窗口设为1秒
action = ssh-log-nickname  # 使用我们定义的日志写入动作

4. 重启Fail2ban生效

配置完成后,重启Fail2ban服务让设置生效:

sudo systemctl restart fail2ban

测试验证

用某个用户的SSH密钥登录服务器,然后查看/var/log/auth.log,你应该能看到类似这样的日志行:

2024-05-20T14:30:00+08:00 Accepted SSH connection from johndoe

如果没看到,先检查auth.log里的成功连接日志是否符合我们过滤器的正则,调整failregex直到匹配成功即可。

备注:内容来源于stack exchange,提问作者meldirlobor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:53:05