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

标签 python sftp checksum paramiko

我使用 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 session 上运行的 SFTP,文件内容在传输时不会被损坏。因此,除非在读取本地文件或写入远程文件时损坏,否则如果 .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 .

关于python - 如何检查Paramiko是否成功将文件上传到SFTP服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52704923/

相关文章:

python - pyc 文件是否独立于解释器体系结构?

php - 使用 phpseclib 从远程服务器下载文件

java - JSch SFTP 详细日志记录

OpenCV 3.0 安装问题

java - 用Java计算远程文件的校验和

java - 轻量级校验和算法的好选择?

Python FFmpeg查询rtsp太慢

python - Apache Airflow——在多个地方使用的自定义类

python - [].append(foo) 成语

ruby - IO错误 : closed stream in Ruby SFTP