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

使用Paramiko传输SFTP文件报错:FileNotFound: [Errno 2] No such file

SFTP文件传输报错FileNotFound: [Errno 2] No such file的解决建议

问题背景

为学校项目开发无人机使用的SFTP模块,暂不考虑安全性,仅需实现基础的连接与文件传输功能。使用paramiko编写代码后,运行时下载、上传操作均报FileNotFound: [Errno 2] No such file错误。

环境说明:Windows平台用OpenSSH搭建SFTP服务器,sshd_config已配置对应路径,防火墙规则正常,同一设备用FileZilla可正常连接传输,网络连通性无问题,代码路径已反复核对。

原代码:

import paramiko

#Open Transport
host, port = "IP Address", 22
transport = paramiko.Transport((host,port))

#Authentication
username, password = "Username", "Password"
transport.connect(None, username, password)

#Connect
sftp = paramiko.SFTPClient.from_transport(transport)

#Download
remotePath = "C:\\Users\\User\\Desktop\\Upload Data\\Test.txt"
localPath = "C:\\Users\\User\\Downloads\\Test.txt"
sftp.get(remotePath, localPath)

#Upload
remotePath = "C:\\Users\\User\\Desktop\\Upload Data"
localPath = "C:\\Users\\User\\Downloads\\Test.txt"
sftp.put(localPath, remotePath)

#Close
if sftp: sftp.close()
if transport: transport.close()

核心问题与解决步骤

  • 远程路径格式错误:SFTP基于SSH协议,使用类Unix风格的路径(正斜杠/),而非Windows本地的反斜杠\。Windows OpenSSH的SFTP绝对路径需要写成/C/Users/User/Desktop/Upload Data/Test.txt这种格式,直接用C:\\...的Windows路径会被服务器判定为无效路径。
  • 上传路径需指定文件名:代码中上传的remotePath是目录,sftp.put要求远程路径要么是完整文件名(明确告诉服务器把本地文件存成什么名字),要么确保目标目录存在且服务器支持自动沿用本地文件名。建议直接指定完整的远程文件名,避免歧义。
  • 确认SFTP会话的工作目录:可以在代码中加入sftp.getcwd()打印当前SFTP会话的根目录,确认你的远程路径是否需要相对于这个目录调整,比如如果根目录是用户的home目录,那么用Desktop/Upload Data/Test.txt即可,无需写全路径。

修改后的示例代码

import paramiko

# Open Transport
host, port = "IP Address", 22
transport = paramiko.Transport((host, port))

# Authentication
username, password = "Username", "Password"
transport.connect(None, username, password)

# Connect
sftp = paramiko.SFTPClient.from_transport(transport)

# 打印当前SFTP工作目录,确认路径基准
print("当前SFTP工作目录:", sftp.getcwd())

# Download - 使用类Unix风格的远程路径
remotePath = "/C/Users/User/Desktop/Upload Data/Test.txt"
localPath = "C:\\Users\\User\\Downloads\\Test.txt"
sftp.get(remotePath, localPath)

# Upload - 指定完整的远程文件名
remotePath = "/C/Users/User/Desktop/Upload Data/Test_uploaded.txt"
localPath = "C:\\Users\\User\\Downloads\\Test.txt"
sftp.put(localPath, remotePath)

# Close
if sftp: 
    sftp.close()
if transport: 
    transport.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:11