我使用python和paramiko在服务器a和服务器B之间复制5GB文件,脚本将从serverX执行,这将从serverX打开到serverb的ssh会话,并使用sshpass运行命令从服务器B复制文件。脚本正在工作,但它没有复制完整的5GB文件。它只复制了一半,有些时间还不到一半
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(serverb, username=user, password=password)
try:
stdin, stdout, stderr = client.exec_command("sshpass -p password scp -v -r root@serverA:/tmp/file_to_copy_name /tmp/",timeout=None)
except Exception as err:
print("copy between server error")
raise
您可能希望通过SSH使用Rsync,而不是通过sshpass(非交互式SSH密码提供程序)使用scp(secure remote file copy)。它支持快速增量文件传输(可以恢复未完成的上传),使用SSH密钥比通过sshpass传递原始密码更安全
比如:
-a
用于存档模式-z
在传输过程中压缩文件数据手册:https://download.samba.org/pub/rsync/rsync.html
此外,它还可以恢复使用scp启动的复制
以下是有关如何通过SSH使用它的说明: https://www.digitalocean.com/community/tutorials/how-to-copy-files-with-rsync-over-ssh
另外,正如@pynexj所指出的,
client.exec_command()
不会等到命令执行完成。因此,您可能希望使用其他方法来检查文件是否已成功复制,以及是否具有与源相同的数据。其中一个选项可以是检查MD5哈希:https://stackoverflow.com/search?q=Python+md5+hash您可能需要检查:What is the fastest hash algorithm to check if two files are equal?
我想你可以用
其中
source
或target
可以是远程服务器路径,也可以是本地服务器路径相关问题 更多 >
编程相关推荐