Python本地密钥连接服务器下载nginx日志图文版
1、先为Python环境安装本工具需要的相关模块。
在管理员cmd下运行例如:
pip install pyinstaller
pip install paramiko
就可以安装完成。

2、将代码添加到编辑器里(直接拷贝会报错,编码不符),我这里用的是gvim,如图所示。

3、#操作本地文件
import os
#远程连接服务器
import paramiko
#线程
import threading
#窗口
import wx
app = wx.App() #创建对象
win = wx.Frame(None,title="服务器日志保存程序", size=(900,600)) #创建窗口对象
funt = wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD)
win.SetFont(funt)
text = wx.TextCtrl(win, value="日志备份从这里开始!", pos=(5,5), size=(800,25)) #创建文本输入框
#text.SetBackgroundColour("#e1e1e1")
ck1 = wx.TextCtrl(win, value="",pos=(5,30), size=((900/3-5),500),style = wx.TE_MULTILINE) #创建文本输入框
ck2 = wx.TextCtrl(win, value="",pos=((900/3-5)+5,30), size=((900/3-5),500),style = wx.TE_MULTILINE) #创建文本输入框
ck3 = wx.TextCtrl(win, value="",pos=((900/3-5)*2+5,30), size=((900/3-5),500),style = wx.TE_MULTILINE) #创建文本输入框
fun = wx.Font(16, wx.SWISS, wx.NORMAL, wx.NORMAL)#定义字体大小
#ck.SetFont(fun)
#html.SetBackgroundColour("#e1e1e1") #这里是背景颜色
ssh_arr = {
'1':{
'mulu':'青岛1',
'host':'123.123.98.186', #这里是服务器ip地址
'user':'root',
'key_pem':'E:/服务器密钥/青岛1.pem',#这里是放在本地的密钥文件
'ck':'ck1'#这里是一个变量值
},
' 2':{
'mulu':'北京1',
'host':'123.123.98.198', #这里是北京的服务器的ip地址
'user':'root',
'key_pem':'E:/服务器密钥/北京1.pem',#这里是放在本地的密钥文件
'ck':'ck2'#这里是一个变量值
},
'3':{
'mulu':'香港1',
'host':'123.123.168.68', #这里是香港服务器的ip地址
'user':'root',#这里是一个变量值
'key_pem':'E:/服务器密钥/香港1.pem',#这里是放在本地的密钥文件
'ck':'ck3'
}
}
def link_ssh(k,ck):
#通过密钥远程连接服务器
key = os.path.expanduser( ssh_arr[k]['key_pem'] )
mykey=paramiko.RSAKey.from_private_key_file( key )
ssh = paramiko.SSHClient() #绑定实例
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
ssh.connect( ssh_arr[k]['host'], 22, ssh_arr[k]['user'], pkey=mykey) #连接远程主机
sftp = ssh.open_sftp()
remote_dir = '/var/log/nginx/'#将要获取nginx日志的目录
#获取当前指定目录下的所有目录及文件
all_files = sftp.listdir_attr( remote_dir )
ck.AppendText('已连接:' + ssh_arr[k]['mulu'])
for x in all_files:
if os.path.isfile( 'E:/服务器日志/log/' + ssh_arr[k]['mulu'] + '/' + x.filename ):
ck.AppendText(' 无需:' + x.filename)
else:
ck.AppendText(' 下载:' + x.filename)
sftp.get( remote_dir + '/' + x.filename, 'E:/服务器日志/log/' + ssh_arr[k]['mulu'] + '/' + x.filename )#下载 两端都要指定文件名
sftp.close()#释放
ssh.close()#释放
def Button1Event(event):
for k in ssh_arr:
if k == '1':
ck = ck1
if k == '2':
ck = ck2
if k == '3':
ck = ck3
ta = threading.Thread(target=link_ssh,args=(k,ck))#创建一个线程ta,执行 threadfun()
ta.start() #调用start(),运行线程
Button1 = wx.Button(win, label="开始", pos = (805,5), size=(80,25)) #创建按钮1
Button1.Bind(wx.EVT_BUTTON,Button1Event)
win.Show() #显示
app.MainLoop() #主事件循环
4、文件另存为指定的目录,我这里是D:/python35/123/123.py
5、开始菜单输入cmd后,右键选择“以管理员身份运行”

6、然后将目录转到我们保存文件的目录

7、然后在cmd执行:
Python 123.py

8、点击“开始”,就开始下载日志文件到本地了。
因为我是启用的线程下载日志,所以下载文件的反馈未排序。

9、本程序可以用pyinstaller打包成exe文件
用管理员cmd执行:pip install pyinstaller
就可以了
然后命令行执行:pyinstaller -F -c 123.py
打包好的exe文件,在同目录的dist文件中
pyinstaller 常用参数说明:
–icon=图标路径
-F 打包成一个exe文件
-w 使用窗口,无控制台
-c 使用控制台,无窗口
