使用 Paramiko 传输 SFTP 文件失败并显示“FileNotFound: [Errno 2] No such file”

问题描述 投票:0回答:1

我正在尝试将一个 SFTP 模块放在一起,以便在学校项目中与无人机一起使用。安全现在不是我关心的问题,因为我只是想首先建立成功的连接和文件传输。

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()

运行上面的代码时,我得到

FileNotFound: [Errno 2] No such file
返回。尝试上传时会返回相同的错误。我正在使用 OpenSSH 在 Windows 平台上托管 SFTP 服务器,如路径所示。

sshd_config
文件正确指向
remotePath
中定义的路径。服务器上的防火墙规则已正确配置,因为我能够从我尝试使用 Python 连接到服务器的同一台计算机上使用 FileZilla 连接到 SFTP 服务器。我也可以使用同一台机器 ping 远程服务器。据我所知,这不是服务器和客户端之间的连接问题。

我真的不确定我做错了什么。我已经四次检查了代码中的路径是否正确。在过去的几个小时里,我一直在努力解决问题,但我的想法已经用完了,所以我需要上网查询。

python sftp paramiko
1个回答
0
投票

C:\Users\User\Desktop\Upload Data\Test.txt
不是典型的 SFTP 路径。它看起来更像是服务器上的物理路径。

使用 GUI SFTP 客户端登录并查看文件的实际 SFTP 路径是什么。

如果可以像(或任何其他):

  • /Upload Data/Test.txt
  • /C/Users/User/Desktop/Upload Data/Test.txt
  • /Test.txt

另请参阅SFTP 路径格式与本地路径格式


强制性警告:不要以这种方式直接使用

Transport
类——您将绕过主机密钥检查,从而失去对 MITM 攻击 的保护。而是使用
SSHClient
类。另见Paramiko“未知服务器”
.

© www.soinside.com 2019 - 2024. All rights reserved.