我正在使用Paramiko模块登录服务器(某些服务器上的ssh和其他服务器上的sftp)。我可以从服务器上的特定文件夹中获取文本和日志文件没问题。但是有许多子目录都有.txt和.log文件。我读了一些get方法不接受的地方(* .txt)。有没有人知道解决这个问题的方法。这是我目前用于登录服务器并获取特定日志的代码:
import paramiko
import sys
import os
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.5.48.74', username='root', password='******')
ftp = ssh.open_sftp()
ftp.get('/var/opt/crindbios/log/crindbios.log', '.')
ftp.close()
答案 0 :(得分:7)
使用以下脚本获取文件列表。然后使用ftp.get
遍历列表import paramiko
import os
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username='****')
apath = '/var/log'
apattern = '"*.log"'
rawcommand = 'find {path} -name {pattern}'
command = rawcommand.format(path=apath, pattern=apattern)
stdin, stdout, stderr = ssh.exec_command(command)
filelist = stdout.read().splitlines()
ftp = ssh.open_sftp()
for afile in filelist:
(head, filename) = os.path.split(afile)
print(filename)
ftp.get(afile, './'+filename)
ftp.close()
ssh.close()
这是dustyprogrammer提出的:在远程服务器上,您应用shell命令来获取文件列表。然后用python对列表进行后处理。
要下载,你必须为每个文件创建一个新的文件路径 - 下载到目录,因为你提出的不起作用(对我来说)。
答案 1 :(得分:1)
可通过sftp.listdir()
轻松访问文件名。因此,我这样做
import os
import paramiko
rserver = "raspberrypi"
ruser = "pi"
rpassword ="<your-password>"
rdirectory_charging_log = "/home/pi/logs/"
directory_charging_log = "/Users/<your-user>/logs/"
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(rserver, username=ruser, password=rpassword)
sftp = ssh.open_sftp()
rfiles = sftp.listdir(rdirectory_charging_log)
rfile = ""
for rfile in rfiles:
sftp.get(rdirectory_charging_log+rfile, directory_charging_log+rfile)
sftp.close()
ssh.close()