sshpass未在两台linux计算机之间复制完整数据

2024-10-01 02:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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

Tags: 文件命令服务器脚本clientparamiko时间password
2条回答

您可能希望通过SSH使用Rsync,而不是通过sshpass(非交互式SSH密码提供程序)使用scp(secure remote file copy)。它支持快速增量文件传输(可以恢复未完成的上传),使用SSH密钥比通过sshpass传递原始密码更安全

比如:

rsync -az /root/bigfile.txt 198.211.117.129:/root/

-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?

我想你可以用

rsync -avP  partial source target

其中sourcetarget可以是远程服务器路径,也可以是本地服务器路径

相关问题 更多 >