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

使用Python ftplib无法连接服务器但PuTTY Plink可正常连接,如何排查?

问题原因及解决方案

核心错误原因

你使用的plink走的是SSH协议,默认占用22端口,对应实现的是SFTP/SSH文件传输逻辑;而ftplib封装的是传统FTP协议,默认占用21端口,两者是完全独立的传输协议,连接逻辑、服务依赖都不互通。plink能连通仅能证明目标主机的SSH服务运行正常,不能证明FTP服务开启且可访问,这是触发WinError 10060连接超时的最常见原因。

排查思路

  • 第一步:验证目标主机21端口是否可访问
    运行命令telnet <你的主机IP> 21,如果返回连接失败,说明目标主机未开启FTP服务,或防火墙、安全组拦截了21端口的访问请求。
  • 第二步:如果21端口可通,检查FTP连接模式
    FTP默认分为主动(PORT)、被动(PASV)两种连接模式,ftplib默认使用被动模式,部分服务器的网络配置仅支持主动模式,可尝试切换模式验证。

解决方案

方案1:目标主机仅开启SSH服务(推荐)

如果你的主机没有单独开启FTP服务,直接用SFTP协议实现文件操作即可,完全匹配你用plink的访问逻辑,可使用第三方库paramiko实现:

  1. 先安装依赖:pip install paramiko
  2. 参考代码:
import paramiko

host = '0.0.0.0'
port = 22
user = 'user'
passwd = 'XXXX'

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 建立SSH连接
ssh_client.connect(hostname=host, port=port, username=user, password=passwd, timeout=10)

# 开启SFTP会话
sftp = ssh_client.open_sftp()
# 列出指定目录内容
dir_content = sftp.listdir('/SubDir/SubSubDir/')
print(dir_content)

# 按需执行文件上传、下载等操作
# sftp.put(local_file_path, remote_file_path)
# sftp.get(remote_file_path, local_file_path)

# 关闭连接
sftp.close()
ssh_client.close()

方案2:确认FTP服务可用时的ftplib适配

如果确认目标主机已开启FTP服务且21端口可访问,可使用优化后的ftplib代码:

import ftplib

host = '0.0.0.0'
user = 'user'
passwd = 'XXXX'

try:
    # 显式设置超时时间,避免长时间无响应
    ftp = ftplib.FTP(host=host, user=user, passwd=passwd, timeout=10)
    # 若被动模式连接失败,取消下方注释切换为主动模式
    # ftp.set_pasv(False)
    # 打印目录列表
    ftp.dir()
    ftp.quit()
except Exception as e:
    print(f"连接失败:{repr(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:24:04