将下载文件的 MD5 与 Python 中 SFTP 服务器上的文件进行比较
Comparing MD5 of downloaded files against files on an SFTP server in Python
在这里,我试图列出我下载的所有文件的 MD5,并将它们与原始文件进行比较,看它们是否是相同的文件。
我现在无法访问服务器来测试此代码,但我真的很好奇它是否可以工作......
有人有更好的解决方案或他们会改变什么吗?
#!/usr/bin/python3
import paramiko
import pysftp
import os
import sys
print("Localpath eingeben: ")
localpath = input()
print("Remothpath eingeben: ")
remotepath = input()
k = paramiko.RSAKey.from_private_key_file("/home/abdulkarim/.ssh/id_rsa")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("connecting")
c.connect(hostname = "do-test", username = "abdulkarim", pkey = k)
print("connected")
sftp = c.open_sftp()
sftp.Connection.get_d(localpath, remotepath)
#sftp.get_d(localpath, remotepath)
def hashCheckDir(f,r):
files = []
# r=root, d=directories, f=files
for r, d, f in os.walk(localpath):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
files1 = []
# r=root, d=directories, f=files
for r, d, f in os.walk(remotepath):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for i in range(2):
for x in files:
localsum = os.system('md5sum ' + files)
remotesum = os.system('ssh do-test md5sum ' + files1)
if localsum == remotesum:
print ("The lists are identical")
else :
print ("The lists are not identical")
hashCheckDir(localpath,remotepath)
c.close()
我是 Python 的新手,所以..如果我犯了一些愚蠢的错误,请多多包涵。
也许我必须先对它们进行排序?
启动外部控制台应用程序 (ssh
) 以在服务器上执行 md5sum
(并为上面的每个文件打开一个新连接)是一种矫枉过正的做法,如果您已经有到同一服务器的本机 Python SSH 连接。
改为use SSHClient.exec_command
:
stdin, stdout, stderr = c.exec_command('md5sum '+ files1)
checksum = stdout.read()
注意 MD5 已过时,请使用 SHA-256 (sha256sum
)。
尽管问题是整个校验和检查是否不过分,请参阅:
How to perform checksums during a SFTP file transfer for data integrity?
强制性警告:请勿使用 AutoAddPolicy
– 您正在失去针对 MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".
的保护
在这里,我试图列出我下载的所有文件的 MD5,并将它们与原始文件进行比较,看它们是否是相同的文件。 我现在无法访问服务器来测试此代码,但我真的很好奇它是否可以工作...... 有人有更好的解决方案或他们会改变什么吗?
#!/usr/bin/python3
import paramiko
import pysftp
import os
import sys
print("Localpath eingeben: ")
localpath = input()
print("Remothpath eingeben: ")
remotepath = input()
k = paramiko.RSAKey.from_private_key_file("/home/abdulkarim/.ssh/id_rsa")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("connecting")
c.connect(hostname = "do-test", username = "abdulkarim", pkey = k)
print("connected")
sftp = c.open_sftp()
sftp.Connection.get_d(localpath, remotepath)
#sftp.get_d(localpath, remotepath)
def hashCheckDir(f,r):
files = []
# r=root, d=directories, f=files
for r, d, f in os.walk(localpath):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
files1 = []
# r=root, d=directories, f=files
for r, d, f in os.walk(remotepath):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for i in range(2):
for x in files:
localsum = os.system('md5sum ' + files)
remotesum = os.system('ssh do-test md5sum ' + files1)
if localsum == remotesum:
print ("The lists are identical")
else :
print ("The lists are not identical")
hashCheckDir(localpath,remotepath)
c.close()
我是 Python 的新手,所以..如果我犯了一些愚蠢的错误,请多多包涵。 也许我必须先对它们进行排序?
启动外部控制台应用程序 (ssh
) 以在服务器上执行 md5sum
(并为上面的每个文件打开一个新连接)是一种矫枉过正的做法,如果您已经有到同一服务器的本机 Python SSH 连接。
改为use SSHClient.exec_command
:
stdin, stdout, stderr = c.exec_command('md5sum '+ files1)
checksum = stdout.read()
注意 MD5 已过时,请使用 SHA-256 (sha256sum
)。
尽管问题是整个校验和检查是否不过分,请参阅:
How to perform checksums during a SFTP file transfer for data integrity?
强制性警告:请勿使用 AutoAddPolicy
– 您正在失去针对 MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".