使用空密码在Dropbear SSH服务器初始化paramiko.SFTPClient时遇异常
解决无密码SSH服务器的Paramiko SFTP连接问题
你当前代码里先尝试空密码connect再调用auth_none的方式会导致Transport状态异常,这就是open_sftp()失败的核心原因。直接通过Transport完成无密码认证,再绑定到SSHClient或直接创建SFTPClient更可靠,完全满足你不用公钥、空密码验证的需求。
修正后的代码方案
import paramiko HOST = "127.0.0.1" USER = "root" # 初始化Transport并建立基础连接 transport = paramiko.Transport((HOST, 22)) transport.connect() # 执行无密码认证(需服务器开启PermitEmptyPasswords yes) transport.auth_none(USER) # 绑定Transport到SSHClient(如果需要用SSHClient执行命令等操作) ssh = paramiko.SSHClient() ssh._transport = transport # 直接从已认证的Transport创建SFTPClient sftp = paramiko.SFTPClient.from_transport(transport) # 示例:测试SFTP操作,比如列出当前目录文件 print(sftp.listdir(".")) # 用完记得关闭资源 sftp.close() transport.close()
关键说明
- 跳过
SSHClient.connect()的默认认证流程,它会优先尝试公钥认证,空密码会触发异常,直接用Transport处理连接和认证更可控。 auth_none(USER)是无密码认证的核心调用,前提是目标SSH服务器已开启PermitEmptyPasswords yes配置,否则会认证失败。- 若不需要SSHClient的命令执行等功能,可直接跳过绑定步骤,仅用Transport创建SFTPClient即可。
内容的提问来源于stack exchange,提问作者Bijesh Mohan
相关产品推荐
相关产品推荐

