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

2024-01-29

我使用 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 功能允许这样做吗?如果是这样的话,具体是如何运作的?


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

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

如果您想明确测试:

虽然有check-file扩大 https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-extensions-00#section-3使用 SFTP 协议来计算远程文件校验和,但并未得到广泛支持。特别是最广泛的 SFTP 服务器实现 OpenSSH 不支持它。看哪些 SFTP 服务器实现支持检查文件扩展名 https://serverfault.com/q/853362/168875.

如果您幸运地连接到另一个支持该扩展的 SFTP 服务器,您可以使用帕拉米科的SFTPFile.check method https://docs.paramiko.org/en/latest/api/sftp.html#paramiko.sftp_file.SFTPFile.check.

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


如果您有服务器的 shell 访问权限,您当然可以尝试运行一些 shell checksum 命令(sha256sum)通过单独的 shell/SSH 连接(或通道)并解析结果。但这不再是 SFTP 解决方案。看使用 Python 将下载文件的 MD5 与 SFTP 服务器上的文件进行比较 https://stackoverflow.com/q/62475321/850848.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查Paramiko是否成功将文件上传到SFTP服务器? 的相关文章

随机推荐