Skip to main content
 首页 » 编程设计

python之如何检查 Paramiko 是否成功将文件上传到 SFTP 服务器

2025年05月04日47JustinYoung

我使用 Paramiko 将文件放入 SFTP 服务器:

import paramiko 
 
transport = paramiko.Transport((host, port)) 
transport.connect(username=username, password=password) 
sftp = paramiko.SFTPClient.from_transport(transport) 
sftp.put(local_path, remote_path) 

现在,我想检查它是否有效。我的想法是比较本地文件和远程文件(位于 SFTP 服务器上)的校验和。

Paramiko 功能是否允许这样做?如果是这样,它究竟是如何工作的?

请您参考如下方法:

使用 SFTP,在加密的 SSH session 上运行,文件内容不可能在传输过程中被破坏。因此,除非它在读取本地文件或写入远程文件时被损坏,否则如果 .put 没有抛出任何错误,您可以非常确定文件已正确上传。

try: 
    sftp.put(local_path, remote_path) 
except: 
    # Something went wrong 

如果你想显式测试:

虽然有 check-file extension到 SFTP 协议(protocol)来计算远程文件校验和,它没有得到广泛支持。特别是最广泛的 SFTP 服务器实现 OpenSSH 不支持它。参见 What SFTP server implementations support check-file extension .

如果你幸运地连接到另一个支持扩展的 SFTP 服务器,你可以使用 Paramiko's SFTPFile.check method .

如果没有,您唯一的选择是将文件下载回来并在本地进行比较。


如果您可以通过 shell 访问服务器,您当然可以尝试通过单独的 shell/SSH 连接(或 channel )运行一些 shell 校验和命令 (sha256sum) 并解析结果。但这不再是 SFTP 解决方案。参见 Comparing MD5 of downloaded files against files on an SFTP server in Python .