使用pysftp连接免费公共SFTP服务器时遭遇ConnectionException与gaierror错误的解决方法咨询
解决pysftp连接免费SFTP服务器的域名解析与端口错误问题
你遇到的两个错误根源其实是同一个问题,加上可能的网络连通性问题,下面一步步拆解解决:
错误原因分析
gaierror: [Errno -2] Name or service not known:这是域名解析失败的典型报错,因为你把端口2222直接拼在了主机名demo.wftpserver.com后面(写成了demo.wftpserver.com:2222),pysftp会把整个字符串当作主机名去DNS解析,自然找不到对应的服务器。ConnectionException: ('demo.wftpserver.com:2222', 22):解析失败后,pysftp会默认尝试连接端口22,所以会抛出这个连接异常。
可行的解决办法
1. 正确分离主机名和端口参数
pysftp的Connection类中,主机名和端口是分开的参数,不能合并写在一起。修改代码如下:
import pysftp cnopts = pysftp.CnOpts() cnopts.hostkeys = None # 仅用于测试场景,生产环境不建议关闭主机密钥校验 # 正确传入主机名和端口 sftp = pysftp.Connection( host='demo.wftpserver.com', username='demo-user', password='demo-user', port=2222, cnopts=cnopts ) print("SFTP连接成功!") sftp.close()
2. 验证网络连通性
如果修改后还是报错,先检查你的网络能否访问这个服务器:
- 打开终端/命令提示符,执行
ping demo.wftpserver.com,看能否正常解析到IP地址 - 尝试用telnet测试端口连通性:
telnet demo.wftpserver.com 2222,如果能连通说明网络没问题,否则可能是防火墙、代理或者服务器临时不可用
3. 生产环境建议:恢复主机密钥校验
你当前关闭了主机密钥检查(cnopts.hostkeys = None),这在测试时可以,但生产环境存在安全风险。建议获取服务器的主机密钥并添加到校验列表中,示例如下:
import pysftp cnopts = pysftp.CnOpts() # 替换为服务器实际的RSA密钥指纹(可通过官方文档或连接工具获取) cnopts.hostkeys.add( 'demo.wftpserver.com', 'ssh-rsa', 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDQjV8XxG6...' ) sftp = pysftp.Connection( host='demo.wftpserver.com', username='demo-user', password='demo-user', port=2222, cnopts=cnopts ) sftp.close()
内容的提问来源于stack exchange,提问作者The Singularity
相关产品推荐
相关产品推荐

