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

使用Python ftplib库连接FTP服务器时密码中的转义字符如何传递?

误解澄清:反斜杠加倍是调试显示问题

你在调试器里看到的双反斜杠是Python展示字符串repr形式时的正常转义,实际存储和发送的字符串只包含1个反斜杠,无需额外处理。你可以直接执行print(pwd)验证实际输出,和你的原始密码一致。你尝试的原生字符串、格式化写法都不会改变这一行为,也不需要额外做这些处理。

报错根因:FTP_TLS 认证顺序和服务器不匹配

从你提供的日志可以看出:

  • FileZilla发送AUTH TLS收到530错误后,自动降级为普通FTP连接,先发送USER和PASS完成登录,后续正常使用
  • 而ftplib的FTP_TLS类默认会在执行login()方法时,先发起AUTH TLS请求再发送账号密码,刚好你的vsFTPd服务端配置要求必须先登录才能执行AUTH命令,所以直接抛出530错误。

解决方案

方案1:使用普通FTP类(和FileZilla降级后逻辑一致)

如果你的场景不需要加密传输,直接替换FTP_TLS为普通FTP类即可,代码如下:

from ftplib import FTP

addr = '192.168.1.23'
usr = 'ftpuser'
pwd = '3Hc]85}Lxqy\\%I+bc1(T'

ftp = FTP()
ftp.set_debuglevel(2)
ftp.connect(host=addr, port=21)
ftp.login(user=usr, passwd=pwd)

方案2:保留FTP_TLS,调整认证顺序

如果后续需要升级到TLS加密,可以先手动发送账号密码完成登录,再发起TLS认证:

from ftplib import FTP_TLS

addr = '192.168.1.23'
usr = 'ftpuser'
pwd = '3Hc]85}Lxqy\\%I+bc1(T'

ftp = FTP_TLS()
ftp.set_debuglevel(2)
ftp.connect(host=addr, port=21)
# 手动完成登录,跳过login方法默认的提前auth逻辑
ftp.sendcmd(f'USER {usr}')
ftp.sendcmd(f'PASS {pwd}')
# 若需要加密传输,登录后再执行TLS升级
# ftp.auth()
# ftp.prot_p()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:06