如何在不使用任何JAR文件的情况下通过Databricks连接SFTP服务器
Python ftplib 连接失败排查方案
首先运行最小验证代码定位错误:
from ftplib import FTP # 替换为实际的FTP服务器地址、用户名、密码 FTP_HOST = "xxx.xxx.xxx.xxx" FTP_USER = "your_username" FTP_PWD = "your_password" try: # 初始化连接,设置超时避免无响应 ftp = FTP(host=FTP_HOST, timeout=15) # 登录认证 login_resp = ftp.login(user=FTP_USER, passwd=FTP_PWD) print(f"连接登录成功,服务器返回:{login_resp}") # 测试列目录验证功能正常 print(f"根目录文件列表:{ftp.nlst()}") ftp.quit() except Exception as e: print(f"连接失败,错误信息:{str(e)}")
常见错误对应解决方案
- 端口连通性报错
先通过本地命令验证21端口是否可达:telnet {FTP_HOST} 21,如果端口不通,优先排查服务器安全组/防火墙是否放通21端口、FTP服务是否正常启动、公网IP是否正确、本地网络是否有出口限制。 - 列目录/操作超时
大概率是主动/被动模式不匹配,ftplib默认开启被动模式,若FTP服务器仅支持主动模式,登录完成后添加代码关闭被动模式:
若服务器要求被动模式,需确认服务器防火墙已放通被动模式的端口段,对应配置在FTP服务端的配置文件中。ftp.set_pasv(False) - FTPS加密连接报错
若使用的是FTPS协议,不能直接用FTP类,需改用FTP_TLS类:from ftplib import FTP_TLS ftp = FTP_TLS(host=FTP_HOST, timeout=15) ftp.login(user=FTP_USER, passwd=FTP_PWD) # 开启数据传输链路加密 ftp.prot_p() - 编码乱码/报错
部分非英文FTP服务端编码不兼容,可手动指定编码适配:# 适配中文服务端常用编码 ftp.encoding = "gbk" # 或通用utf-8 ftp.encoding = "utf-8" - 认证失败报错
确认用户名密码是否正确,是否有IP白名单限制,部分FTP服务端会触发多次错误尝试后临时封禁IP,可更换网络环境或等待10分钟后重试。
内容的提问来源于stack exchange,提问作者Venigalla Sai Chowdary
相关产品推荐
相关产品推荐

