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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:33:25