Python本地密钥连接服务器下载nginx日志图文版

2026-01-14 13:46:02

1、先为Python环境安装本工具需要的相关模块。

在管理员cmd下运行例如:

pip install pyinstaller

pip install paramiko

就可以安装完成。

Python本地密钥连接服务器下载nginx日志图文版

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

Python本地密钥连接服务器下载nginx日志图文版

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后,右键选择“以管理员身份运行”

Python本地密钥连接服务器下载nginx日志图文版

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

Python本地密钥连接服务器下载nginx日志图文版

7、然后在cmd执行:

Python   123.py

Python本地密钥连接服务器下载nginx日志图文版

8、点击“开始”,就开始下载日志文件到本地了。

因为我是启用的线程下载日志,所以下载文件的反馈未排序。

Python本地密钥连接服务器下载nginx日志图文版

9、本程序可以用pyinstaller打包成exe文件

              用管理员cmd执行:pip install pyinstaller

              就可以了

              然后命令行执行:pyinstaller -F -c 123.py

              打包好的exe文件,在同目录的dist文件中

pyinstaller 常用参数说明:

     –icon=图标路径 

    -F 打包成一个exe文件

     -w 使用窗口,无控制台 

    -c 使用控制台,无窗口 

Python本地密钥连接服务器下载nginx日志图文版

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢