Windows11下pysftp执行sftp.get报错OSError: Failure求助
SFTP get操作出现
OSError: Failure及权限问题的排查与解决 一、远程路径格式错误是核心诱因
你当前传入的remotepath是Windows本地物理路径C:/Users/Profile/sftpdata/remote/gimme.txt,但SFTP服务器的远程路径是基于服务器配置的根目录的相对/绝对路径,并非你本地的磁盘路径。服务器无法识别你本地的C盘路径,因此触发Failure错误。
修正方式:
根据sftpserver的根目录映射规则调整远程路径:
- 若服务器将
C:/Users/Profile/sftpdata/remote设为admin用户的SFTP根目录,远程路径直接写gimme.txt即可; - 若服务器根目录是
C:/Users/Profile/sftpdata,远程路径则为remote/gimme.txt。
修改后的代码片段:
# 示例:假设SFTP根目录对应C:/Users/Profile/sftpdata remotepath = "remote/gimme.txt" localpath = "C:/Users/Profile/sftpdata/local/gimme.txt"
二、本地路径权限问题的解决
当你将localpath设为文件夹路径时出现权限错误,可从以下两点排查:
- 目标文件夹不存在:先确保本地文件夹已创建,可通过代码提前生成:
import os os.makedirs("C:/Users/Profile/sftpdata/local", exist_ok=True) - 进程无写入权限:右键以管理员身份运行Python脚本,或修改
C:/Users/Profile/sftpdata/local文件夹的权限,给当前登录用户添加写入权限。
三、额外优化建议
- 替换pysftp为paramiko直接调用:pysftp已停止维护,与Paramiko 3.0.0存在兼容性风险,直接使用paramiko实现更稳定:
import paramiko remotepath = "remote/gimme.txt" localpath = "C:/Users/Profile/sftpdata/local/gimme.txt" transport = paramiko.Transport(('localhost', 3373)) transport.connect(username='admin', password='admin') sftp = paramiko.SFTPClient.from_transport(transport) try: sftp.get(remotepath, localpath) finally: sftp.close() transport.close() - 谨慎关闭主机密钥检查:你当前设置
cnopts.hostkeys = None会跳过主机密钥验证,仅建议测试环境临时使用,生产环境需配置正确的主机密钥以保证安全。
内容的提问来源于stack exchange,提问作者Henry Thornton
相关产品推荐
相关产品推荐

