问题现象 K8S
集群所有节点之间网络异常,无法执行正常的SSH
操作。
原因分析 基于该现象,首先怀疑是使用的密码错误,先排查使用的密码和实际密码和是否一致,经确认业务存储的密码跟实际密码是一致的,排除密码不一致的问题;
再排查是不是有异常的ip
使用错误密码连接:
这里使用的是ipv6
地址,需要注意,默认的netstat
命令看到的ipv6
地址是不全的,无法方便看出完整的ip
地址,需要添加-W
命令完整显示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@node1 ~] tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 156183/sshd: /usr/s tcp6 0 0 :::22 :::* LISTEN 156183/sshd: /usr/s tcp6 0 0 2000:8080:5a0a:2f:59732 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:44072 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:35666 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:42998 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:59834 2000:8080:5a0a:2f40::22 ESTABLISHED 170769/java tcp6 0 0 2000:8080:5a0a:2f:59652 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:39430 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:35648 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:36852 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:43162 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:35002 2000:8080:5a0a:2f40::22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f:36052 2000:8080:5a0a:2f40::22 ESTABLISHED 170769/java
完整ipv6
地址的ssh
连接如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@node1 ~] tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 156183/sshd: /usr/s tcp6 0 0 :::22 :::* LISTEN 156183/sshd: /usr/s tcp6 0 0 2000:8080:5a0a:2f40:8002::5:48950 2000:8080:5a0a:2f40:8002::5:22 ESTABLISHED 170769/java tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52506 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:56798 2000:8080:5a0a:2f40:8002::6:22 ESTABLISHED 170769/java tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52624 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:56860 2000:8080:5a0a:2f40:8002::6:22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52396 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52398 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:22 2000:8080:5a0a:2f40:8002::5:45532 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52202 2000:8080:5a0a:2f40:8002::5:22 TIME_WAIT - tcp6 0 0 2000:8080:5a0a:2f40:8002::5:52348 2000:8080:5a0a:2f40:8002::5:22 ESTABLISHED 170769/java
从上面的记录看,至少当前没有异常ip
做ssh
连接,再确认一下是不是之前出现过错误密码导致密码被锁的情况;
查看/var/log/secure
日志(日志已发生过轮转,无法确认出问题的初始时间点),查看系统最近没有发生过重启,继续看journal --boot
里的登录失败日志,找到了出问题的时间点,并且可以看到源ip
地址2000:8080:5a0a:2f47::2
一直使用错误密码登录:
1 2 3 4 5 6 7 8 cat boot.log |grep "Failed password" |less3月 26 10:42:19 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2 3月 26 10:42:23 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2 3月 26 10:42:25 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2 3月 26 10:42:28 node1 sshd[114043]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 34968 ssh2 3月 26 10:42:31 node1 sshd[116187]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 35194 ssh2 3月 26 10:42:34 node1 sshd[116187]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 35194 ssh2 3月 26 10:42:36 node1 sshd[116187]: Failed password for admin from 2000:8080:5a0a:2f47::2 port 35194 ssh2
正常来说,使用错误密码登录失败后,密码被锁到指定时间后会自动解锁。但问题环境当前没有错误密码连接的情况下,使用正确密码依然无法连接。
临时注释/etc/pam.d/security-auth
和/etc/pam.d/password-auth
中auth
相关的配置,验证ssh
异常是否是密码锁配置导致:
修改完观察一段时间,ssh
恢复正常,还原回去后,ssh
又出现异常,基本确认是配置问题。从系统相关同事了解到,这里使用的密码锁定模块tally
是个老模块,因为存在缺陷已经被废弃,其中一个问题就是:在使用错误密码被锁后,即使密码正确了,也无法解除锁定 。建议使用faillock
模块替代,配置方法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@node1 ~] auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail deny=5 even_deny_root unlock_time=900 root_unlock_time=10 auth sufficient pam_faillock.so authsucc deny=5 even_deny_root unlock_time=900 root_unlock_time=10 auth required pam_deny.so [root@node1 ~] 在文件第二行(第一行为 auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail deny=5 even_deny_root unlock_time=900 root_unlock_time=10 auth sufficient pam_faillock.so authsucc deny=5 even_deny_root unlock_time=900 root_unlock_time=10 auth required pam_deny.so
说明:faillock
模块远程登录、本地登录过程中,用户锁定均不会有任何提示,只会出现锁定期间即使密码输入正确也无法登录系统的现象,解锁后可正常登录。
至于为什么出现这个问题,最后了解到是客户那边的漏扫平台使用弱密码故意扫的,正常只会扫一次,不清楚为什么触发扫了多次。
解决方案 锁密码的安全加固使用faillock
模块替代老版本的tally
模块。