Paramiko scp从远程机器正则表达式复制

问题描述 投票:1回答:2

有没有办法我可以使用paramiko scp复制以名称“output”结尾的远程文件。

我有下面的代码,只有当我提供完整路径或确切文件名时才复制

下面是代码

 import paramiko
 import os
 from paramiko import SSHClient
 from scp import SCPClient


def createSSHClient(self, server):
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(server, self.port, self.user, self.password)
    return client

  def get_copy(self, hostname, dst):
    ssh = self.createSSHClient(hostname)
    scp = SCPClient(ssh.get_transport())
    scp.get(dst)
    scp.close()

我在想什么

     get_copy(1.1.1.1, "*output")

我找不到文件错误

python python-2.7 paramiko scp
2个回答
2
投票

也许需要首先使用ssh来获取列表,然后逐个scp它们。

如下所示,仅供参考。

def get_copy(self, hostname, dst):
    ssh = createSSHClient(hostname)

    stdin, stdout, stderr = ssh.exec_command('ls /home/username/*output')
    result = stdout.read().split()

    scp = SCPClient(ssh.get_transport())
    for per_result in result:
        scp.get(per_result)
    scp.close()
    ssh.close()

1
投票

我发现在这种情况下还有两种方法是有用的。

1)您也可以在不使用SCPClient的情况下进行,但只能使用Paramiko本身。喜欢 -

def get_copy(self, hostname, dst):
    ssh = createSSHClient(hostname)
    sftp = ssh.open_sftp()
    serverfilelist = sftp.listdir(remote_path)
    for f in serverfilelist:
            if re.search("*output", f):
                sftp.get(os.path.join(remote_path, f), local_path)

    ssh.close()

2)如果你想使用正则表达式(通配符)将SCPClient用于SCP文件,我认为THIS链接会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.