You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python ftplib连接22端口FTP服务器出现EOFError报错如何解决

报错成因
  • 核心为协议不匹配:你使用的Python标准库ftplib.FTP仅支持FTP/FTPS协议,但目标服务为SFTP(SSH文件传输协议):你使用的连接端口是22(SFTP默认端口),域名前缀也明确标注是sftp,两种协议底层实现完全不兼容,ftplib无法解析SFTP服务返回的握手数据,连接被服务端断开后就会抛出EOFError。
  • WinSCP可以正常连接的原因是它本身同时兼容FTP、SFTP等多种文件传输协议,你在WinSCP的连接配置中默认选择了SFTP协议,和你代码中使用的FTP协议不一致。
修复方案

你需要使用支持SFTP协议的Python库完成上传,推荐使用封装简洁的pysftp(基于paramiko开发),操作步骤如下:

  1. 安装依赖库
pip install pysftp
  1. 替换原有代码为SFTP实现,参考代码如下:
import os
import pysftp

host = "sftp.xx.com"
username = "username"
password = "passwrd"
# Windows路径建议加r前缀避免转义问题
local_file = r"C:\sample.csv"
remote_target_dir = "/content/remotedir"

# 测试环境可关闭主机密钥校验,生产环境建议配置known_hosts提升安全性
cn_options = pysftp.CnOpts()
cn_options.hostkeys = None

# 自动管理连接无需手动关闭
with pysftp.Connection(
    host=host,
    port=22,
    username=username,
    password=password,
    cnopts=cn_options
) as sftp:
    # 切换到远程目标目录
    sftp.cwd(remote_target_dir)
    # 上传本地文件到远程目录
    sftp.put(local_file, os.path.basename(local_file))
    # 打印目录内容验证上传结果
    print("远程目录文件列表:", sftp.listdir())

额外注意事项

  • Windows系统下的文件路径如果使用反斜杠\,需要给字符串加r前缀,否则\开头的字符会被识别为转义符,导致文件找不到报错。
  • 生产环境使用SFTP建议保留主机密钥校验,避免中间人攻击风险,不要直接关闭hostkeys检查。

内容的提问来源于stack exchange,提问作者user739115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 16:18:01