我使用authorized_keys文件为我的其中一台服务器创建了无密码的ssh登录。
服务器上有 fail2ban,我注意到在几次成功登录后,我无法再登录(连接超时)。如果我禁用 fail2ban,我可以再次登录。有没有办法配置 fail2ban 不将我的成功登录次数计入我的账户?
谢谢!
答案1
我遇到过类似的情况。即使成功登录,sshd 日志文件 (/var/log/messages) 中也会显示“失败”消息。这是由这个正则表达式引起的(请参阅 Chris S 的回答):
^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
与 /var/log/messages 文件中的以下行匹配:
Apr 18 14:07:02 hostname sshd[20972]: Failed none for root from 123.45.67.89 port
50472 ssh2
当用户成功登录时,消息文件中仍会出现“无失败”消息。
为了解决这个问题,我更改了 sshd_config 文件(/etc/ssh/sshd_config)以指定
LogLevel INFO
而不是
LogLevel VERBOSE
这将在登录成功时停止显示“无失败”消息,但在登录失败时保留该消息。
我还考虑过更新 sshd.conf fail2ban 配置文件并在“ignoreregex”行中添加一些内容,但更新 sshd 是一个更简洁的解决方案。
答案2
您可以使用 ignoreip 配置选项来告诉 fail2ban 忽略您的 IP。
http://www.fail2ban.org/wiki/index.php/Commands
在 /etc/fail2ban/jail.conf 中添加类似
ignoreip = 127.0.0.1 192.168.0.0/24
答案3
我的 sshd.local 文件有此行来修复类似的问题。比较一下你的,应该类似:
failregex = ^%(__prefix_line)s(?:error: PAM: )?[A|a]uthentication (?:failure|error) for .* from <HOST>\s*$
^%(__prefix_line)sDid not receive identification string from <HOST>$
^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
^%(__prefix_line)srefused connect from \S+ \(<HOST>\)$
答案4
这并不能解决您的问题,但希望能让您了解发生这种情况的原因。
ssh 客户端正在使用您描述的 ssh 密钥。我假设您的客户端在列出的 ssh 代理 (ssh-add -l) 中拥有多个 ssh 密钥。在这样的设置中,ssh 客户端正在连接到服务器并尝试使用“其中一个密钥”进行身份验证。
因此,所发生的情况是,ssh 客户端会接连尝试一个密钥,直到服务器接受一个密钥。
假设有 3 个 ssh 密钥,最坏的情况是 2 次尝试失败后成功登录。使用 fail2ban 的“findtime”多次连接...然后你就被禁止了。
我目前也在寻找解决方案。找到后我会分享。;)