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

如何在Python的ftplib中实现FTPS密钥短语自动输入?

解决FTPS连接时自动输入密钥短语的问题

我来帮你搞定这个手动输入密钥短语的麻烦!你的curl命令能正常运行是因为直接在参数里指定了证书密码,而Python的ftplib.FTP_TLS默认不会自动处理这个,得我们手动配置SSL上下文来实现自动化。

核心思路

我们需要用Python的ssl模块创建一个SSL上下文,在这个上下文里提前加载好证书、密钥,并且传入密钥短语(cert_password),然后把这个上下文传给FTP_TLS对象,这样连接时就会自动使用配置好的参数,不用手动输入密码了。

完整代码示例

import ftplib
import ssl

# 配置参数
ftp_host = "ftp.mysite.com"
ftp_user = "test_user"
ftp_pass = "test_password"
cert_file = "my_cert.crt"
key_file = "my_key.key"
cert_passphrase = "cert_password"  # 你之前手动输入的密码

# 创建SSL上下文
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
# 加载证书链,同时传入密钥短语
context.load_cert_chain(certfile=cert_file, keyfile=key_file, password=cert_passphrase)

# 如果需要忽略证书验证(对应curl的-k参数,生产环境不推荐)
# context.check_hostname = False
# context.verify_mode = ssl.CERT_NONE

# 初始化FTPS连接
with ftplib.FTP_TLS(host=ftp_host, context=context) as ftp:
    ftp.login(user=ftp_user, passwd=ftp_pass)
    # 开启数据通道TLS加密(对应curl的--ftp-ssl,多数FTPS服务器需要)
    ftp.prot_p()
    
    # 示例:下载文件
    remote_file_path = "/path/to/remote/file.txt"
    local_file_path = "local_file.txt"
    with open(local_file_path, "wb") as f:
        ftp.retrbinary(f"RETR {remote_file_path}", f.write)
    
    print("文件下载完成!")

关键说明

  • ssl.SSLContext:负责管理SSL/TLS的配置,在这里加载证书和密钥,直接跳过手动输入密码的步骤。
  • load_cert_chain的password参数:直接传入你之前需要手动输入的cert_password,实现自动化验证。
  • ftp.prot_p():开启数据传输的TLS加密,对应curl的--ftp-ssl,如果你的服务器不需要可以省略,但大部分正规FTPS服务器会要求这一步。
  • 关于-k参数:如果服务器用的是自签名证书需要跳过验证,就打开代码里注释的两行,但生产环境一定要慎用,这会降低连接的安全性。

这样配置后,你的Python代码就会像curl命令一样自动处理密钥短语,不用再手动输入啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:52:25