如何在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
相关产品推荐
相关产品推荐

