最近在开发CMDB系统,有一个应用要用到paramiko模块,代码如下
ssh_client.connect(ip, 22, user, password, timeout=6)
很正常的代码,但是在测试时我输入root用户名和错误密码,竟然连接成功了,百思不得其解。后面打开xshell查看下服务器
tail -f /var/log/secure
发现有如下端倪
Nov 28 00:51:21 web-02 sshd[3633]: pam_unix(sshd:session): session opened for user root by (uid=0)
Nov 28 00:51:22 web-02 sshd[3649]: Accepted publickey for root from 192.168.239.1 port 1456 ssh2: RSA SHA256:ul5WYZSwkFOpHgOkTyx7HpvWIKLw2BlYHGpPn6j20fk
Nov 28 00:51:22 web-02 sshd[3649]: pam_unix(sshd:session): session opened for user root by (uid=0)
Nov 28 00:51:25 web-02 sshd[3663]: Accepted publickey for root from 192.168.239.1 port 1459 ssh2: RSA SHA256:ul5WYZSwkFOpHgOkTyx7HpvWIKLw2BlYHGpPn6j20fk
Nov 28 00:51:25 web-02 sshd[3663]: pam_unix(sshd:session): session opened for user root by (uid=0)
竟然用的密钥认证,后面查看关于paramiko的文档得知,Paramiko客户端在连接时会首先尝试使用 密钥认证,如果密钥存在且有效的话,即使你提供了密码,它也可能会优先使用密钥认证。这意味着,即使你明确指定了 password
,如果本地存在有效的 SSH 密钥,它也可能使用密钥认证进行连接。
试了一下在~/.ssh/authorized_keys里把相关的密钥删除,就恢复正常了