TL; DR:
将此添加:
allow_agent=False和/或添加
look_for_keys=False到您的
connect()呼叫中。
通过对此进行一些研究,我得出的结论是,Paramiko SSH客户端的公共密钥身份验证并不总是适用于所有SSH服务器。我试图连接到Cisco
ASA设备。错误日志的相关部分是:
DEBUG:paramiko.transport:Switch to new keys ...DEBUG:paramiko.transport:Trying SSH agent key 5d081d52f889f2c224606d6b2065606eDEBUG:paramiko.transport:userauth is OKDEBUG:paramiko.transport:Authentication type (publickey) not permitted.DEBUG:paramiko.transport:Allowed methods: ['password']INFO:paramiko.transport:Disconnect (pre 2): Protocol error: expected packet type 50, got 5
注意“尝试SSH代理密钥…”部分吗?我不想要那个,我想强制密码验证。在OpenSSH交互式客户端从公钥正常退回到密码的地方,paramiko则没有,强制它使用用户/通过身份验证为我解决了这个问题,它可能对您有用。
我不知道这是paramiko错误还是SSH服务器上的错误。与OpenSSH服务器通讯时,Paramiko确实会从公钥还原为密码或与键盘交互。



