有没有办法我可以使用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文件,我认为THIS链接会有所帮助。