我使用authorized_keys文件为我的一台服务器创build了一个无密码的sshlogin名。
服务器上有fail2ban,我注意到,几次成功的login后,我不能再login(连接超时。)如果我禁用fail2ban,我可以再次login。有没有办法configurationfail2ban不算我的成功login对我?
谢谢!
我也有类似的情况。 即使login成功,sshd日志文件(/ var / log / messages)中也会出现“Failed”消息。这是由正则expression式引起的(见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
当用户login成功时,消息文件中仍然出现“失败的无”消息。
为了解决这个问题,我改变了sshd_config文件(/ etc / ssh / sshd_config)来指定
LogLevel INFO
而不是
LogLevel VERBOSE
这将停止成功login的“失败无人”消息,但保留login失败。
我也考虑过更新sshd.conf fail2banconfiguration文件,并在'ignoreregex'这一行添加一些内容,但更新sshd是一个更清晰的解决scheme。
您可以使用ignoreipconfiguration选项告诉fail2ban忽略您的IP。
http://www.fail2ban.org/wiki/index.php/Commands
进入/etc/fail2ban/jail.conf添加类似的东西
ignoreip = 127.0.0.1 192.168.0.0/24
我的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>\)$
这不是解决你的问题,但希望给你一个想法,为什么发生。
ssh客户端正如您所描述的那样使用ssh密钥。 我假设你的客户端在列出的ssh代理(ssh-add -l)中有多个ssh密钥。 在这样的设置中,ssh客户端连接到服务器,并尝试使用“其中一个密钥”进行身份validation。
那么会发生什么事是,ssh客户端一个接一个地尝试一个密钥,直到服务器接受一个密钥。
假设3个ssh密钥,最坏的情况会导致2个失败的尝试,然后成功login。 用fail2ban的“findtime”连接多次…而且你被禁止了。
我目前正在寻找一个解决scheme。 当我find它时,我会分享它。 ;)