使用python通过SSH传输Tar的文件传输

时间:2018-05-21 21:55:03

标签: python file ssh server tar

我想在python中遇到如下命令:

  tar -cf - files | ssh -c arcfour128 user@remote "tar -xf - -C /directory/" 

我显然可以使用subprocess.run

subprocess.run("""tar -cf - %s | ssh -c arcfour128 user@remote "tar -xf - -C /directory/" """ % file_list ,shell=True))

然而,这样的命令既不提供进展信息也不提供简单的异常管理。 有没有办法使用库tarfile和paramiko来使用本机python代码? thx

1 个答案:

答案 0 :(得分:0)

您可以使用paramiko的SFTP客户端进行此操作。有几种方法可以打开sftp传输(请参阅docsdemo),但为了简单起见,这里有一个示例,我计算传输的文件并使用put函数的回调中间进展。

import paramiko
from glob import glob
import posixpath

def xfer_callback(cur, total):
    print("{}...{}".format(cur, total))

ssh_client =paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname="localhost",username="td",
    password="notmyrealpassword")
ftp = ssh_client.open_sftp()


remote_base = "/home/td/tmp/deleteme"

files = glob("*.py")
count = 1
for fn in files:
    print("sending {} of {}".format(count, len(files)))
    ftp.put(fn, posixpath.join(remote_base, fn), xfer_callback)
    count += 1

示例输出

$ python3 test.py
sending 1 of 6
411...411
sending 2 of 6
557...557
sending 3 of 6
453...453
sending 4 of 6
1117...1117
sending 5 of 6
32768...118000
65536...118000
98304...118000
118000...118000
sending 6 of 6
515...515