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

Paramiko scp copy from remote machine regular expression

有什么方法可以使用 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")

我收到文件未找到错误

可能需要先用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) 你也可以不使用 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 文件, link 将 有帮助,我想。