iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python堡垒机实现之基础知识
  • 858
分享到

Python堡垒机实现之基础知识

堡垒基础知识Python 2023-01-31 02:01:13 858人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一般堡垒机都具有5个基本功能:    1、权限控制    2、执行命令    3、上传下载文件    4、远程登录    5、记录操作权限控制:    说明:根据不同的登录用户分配不同的可管理的主机组。(再细分的权限就是根据不同的用户控制可

一般堡垒机都具有5个基本功能:

    1、权限控制

    2、执行命令

    3、上传下载文件

    4、远程登录

    5、记录操作


权限控制:

    说明:根据不同的登录用户分配不同的可管理的主机组。(再细分的权限就是根据不同的用户控制可在主机上执行的命令,一般不会限制的这么严格)

    思路:使用数据库创建用户表,表字段有ID、用户名、密码、所属组,再创建主机表,表字段有ID,主机IP,所属组。其中用户表中的所属组和主机表中的所属组相对应,这样就能把两张表关联起来。当用户登录的时候就可以根据用户名去获取可管理的主机列表。

    例子:(这里只写出关于python连接Mysql数据库的例子)

import mysqldb

def con_mysql(mhost,muser,mpasswd,mdb):    #连接数据库需要的参数
   try:
      con = MySQLdb.connect(host=mhost,user=muser,passwd=mpasswd,db=mdb)
      cur = con.cursor()
   except MySQLdb.Error,err_msg:
      print 'Mysql Error Msg:',err_msg
      sys.exit()

   try:
      cur.execute('select * from host_list')    #执行SQL语句
      info = cur.fetchall()     #获取主机列表
      return info                #返回获取到的主机列表
   except MySQLdb.Error,err_msg:
      print 'Mysql Error Msg:',err_msg
      cur.close()
      con.close()
      sys.exit()

执行命令:

    说明:这里的执行命令一般是指批量执行命令,比如需要同时获取N台主机的主机名。

    思路:使用paramiko模块来实现远程登录服务器并执行命令。使用multiprocessing来实现批量并发执行。

    例子:(这里只写出paramiko模块远程密码登录服务器并执行命令的例子)

import paramiko

class Paramiko_Manage():
    def __init__(self,host,port,user,passwd):    #初始化连接服务器所需要的参数
        self.host = host
        self.port = port
        self.user = user
        self.passwd = passwd    #使用密码认证

    def connect(self):        #连接方法,用来建立与服务器的连接
        self.transport = paramiko.Transport((self.host,self.port))
        self.transport.connect(username=self.user,passWord=self.passwd)
        print 'connect'

    def close(self):        #关闭方法,用来关闭与服务器的连接
        self.transport.close()
        print 'close'

    def cmd(self,command):        #执行命令的方法,接收需要执行的命令作为参数
        ssh = paramiko.SSHClient()
        ssh._transport = self.transport
        stdin, stdout, stderr = ssh.exec_command(command,timeout=3)
        print 'command resluat: ',stdout.read()

    def run(self,command):
        self.connect()        #建立连接
        self.cmd(command)     #执行命令
        self.close()          #关闭连接

p = Paramiko_Manage('192.168.100.211',22,'test','123')
p.run('hostname')

执行结果:
connect
command resluat:  Test1

close


上传、下载文件:

    说明:批量上传文件相对比较简单,如果是批量下载文件还需要考虑到多台服务器文件重名的问题。

            还需要考虑到文件上传后比较大小以确认是否上传下载成功。

    思路:使用paramiko模块来实现远程上传下载文件。使用multiprocessing来实现批量并发执行。    

    例子:(这里只写出paramiko模块远程秘钥认证登录服务器并执行命令的例子)

import paramiko
import os

class Paramiko_Manage():
    def __init__(self,host,port,user,key):
        self.host = host
        self.port = port
        self.user = user
        keyfile = os.path.expanduser(key)    #使用秘钥认证
        self.key = paramiko.RSAKey.from_private_key_file(keyfile)

    def connect(self):
        self.transport = paramiko.Transport((self.host,self.port))
        self.transport.connect(username=self.user,pkey=self.key)
        print 'connect'

    def close(self):
        self.transport.close()
        print 'close'

    def trans(self,file1,file2):    #传输文件的方法
        sftp = paramiko.SFTPClient.from_transport(self.transport)
        file1 = '%s_%s' % (file1, self.host)   #修改下载文件的保存文件名
        sftp.get(file2,file1)
        file1_size = os.path.getsize(file1)    #获取下载文件的大小
        file2_size = int(str(sftp.stat(file2)).split()[4]) #获取远程文件的大小
        if file1_size == file2_size:    #比较两个文件大小
            print 'File trans done'

    def run(self,file1,file2):
        self.connect()      #建立连接
        self.trans(file1,file2)  #传输文件
        self.close()               #关闭连接 

p = Paramiko_Manage('192.168.100.211',22,'test2','~/.ssh/id_rsa')
p.run('/root/hosts','/etc/hosts')

执行结果:
connect
File trans done
close


远程登录和记录操作:

    说明:通过堡垒机ssh远程连接到服务器,并执行操作,和在终端执行操作的效果一样。

    思路:使用paramiko实现远程连接服务器的功能,使用sys.stdin和select处理用户输入和接受返回结果。

    例子:

import paramiko
import select
import sys
import Socket
import os

tran = paramiko.Transport((host,port))    #连接服务器,host和port自定义
tran.start_client()
default_path = os.path.join(os.environ['HOME'],'.ssh','id_rsa')
key = paramiko.RSAKey.from_private_key_file(default_path)
tran.auth_publickey('root',key)
chan = tran.open_session()    #打开一个通道
chan.get_pty()                #获取一个终端
chan.invoke_shell()           #激活器

f = open('log.log','a')       #打开一个文件用于写入执行的操作
while True:
    # 监视用户输入和服务器返回数据
    # sys.stdin 处理用户输入
    # chan 是之前创建的通道,用于接收服务器返回信息
    readable,writeable,error = select.select([chan,sys.stdin,],[],[],1)
    if chan in readable:        #接受命令的返回结果
        try:
            x = chan.recv(1024)
            if len(x) == 0:
                print '\r\n*** EOF\r\n',
                f.close()    #退出时关闭记录文件
                break
            sys.stdout.write(x)
            sys.stdout.flush()
        except socket.timeout:
            pass
    if sys.stdin in readable:    #处理用户输入发送到服务器执行
        inp = sys.stdin.readline()
        f.write(inp)    #记录用户输入
        chan.sendall(inp)

chan.close()
tran.close()


以上只是关于堡垒机的一些功能的简单思路。实际应用过程中还需要在此基础上进行扩展。

博客的部分内容和思路整理自武沛齐的博客。

   

--结束END--

本文标题: Python堡垒机实现之基础知识

本文链接: https://www.lsjlt.com/news/186679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python堡垒机实现之基础知识
    一般堡垒机都具有5个基本功能:    1、权限控制    2、执行命令    3、上传下载文件    4、远程登录    5、记录操作权限控制:    说明:根据不同的登录用户分配不同的可管理的主机组。(再细分的权限就是根据不同的用户控制可...
    99+
    2023-01-31
    堡垒 基础知识 Python
  • python之基础知识
    1、变量: 2、字符串:用   “  ” 或 ' ' 标注的。 3、列表:[  ] 4、del 和 pop 的区别: 判断何时使用:当从列表中删除元素后不再使用,则del,若后续还使用则pop() 例: #del name =["lele...
    99+
    2023-01-30
    基础知识 python
  • Python基础知识之2——字典
      字典是什么? 字典是另外一个可变的数据结构,且可存储任意类型对象,比如字符串、数字、列表等。字典是由关键字和值两部分组成,也就是 key 和 value,中间用冒号分隔。这种结构类似于新华字典,字典中每一个字都有一个对应的解释,具体的...
    99+
    2023-01-30
    字典 基础知识 Python
  • python基础知识
    1.注释   1.1.单行注释:以#开头,#右边的有所东西当做说明.   1.2.多行注释:'''   我是多行注释   '''   2.变量   2.1.为了充分的利用内存空间以及更有效率的管理内存,变量是有不同类型的     2.1....
    99+
    2023-01-30
    基础知识 python
  • Python 基础知识
    只是打印出 hello world 肯定是不够的,是吗?你会希望做得比这还要多——你想要输入一些内容,操纵它,然后从中得到一些输出出来的内容。我们可以在 Python 中通过使用变量与常量来实现这一目标,在本章中我们还会学习其它的一些概...
    99+
    2023-01-31
    基础知识 Python
  • 机器学习之基础知识(全)
    目录 1.机器学习概述 1.1 人工智能概述 1.1.1 人工智能使用场景 1.1.2 人工智能小案例 1.2 人工智能发展历程 1.2.1 图灵测试 1.2.2 发展历程 1.2.3 小结 1.3 人工智能主要分支 1.3.1 人工智能、...
    99+
    2023-08-31
    机器学习
  • Python基础知识(一)
      #Python中开始那个Hello World挺简单的。  #!user/bin/env python3  #这一行是shebang,用以指示用哪个解释器来执行,如果有的话,必须在程序第一行  print("Hello World!")...
    99+
    2023-01-31
    基础知识 Python
  • python的基础知识
    1.python中的注释 ctrl + / 批量注释 块注释: 上下三个双引号中间的部分呢全部被注释" " "这是一个多行注释 " " " python的脚本编写 print('hello pyth...
    99+
    2023-01-31
    基础知识 python
  • Python基础知识1
     一、PRINT FORMATTED OUTPUT1、%形式输出1.1 匹配字符,整数,浮点数(含精度),%类似转义print("my name is %s,age %d height %.2fm learning py...
    99+
    2023-06-02
  • Python基础知识实例分析
    这篇文章主要介绍了Python基础知识实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python基础知识实例分析文章都会有所收获,下面我们一起来看看吧。在Python 语言中,对象是通过引用传递的。多元...
    99+
    2023-06-17
  • 万恶之源 - Python基础知识补充
    编码转换 编码回顾:   1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符.    没有中⽂, 8个01代码, 8个bit, 1个byte   2. GBK: 中⽂国标码, ⾥⾯包含了ASCII编...
    99+
    2023-01-30
    万恶 之源 基础知识
  • Python基础知识之变量的详解
    目录一.定义二.命名方法2.1小驼峰命名法2.2大驼峰命名法2.3下划线命名法三.命名规则3.1标识符3.2关键字四.使用方法4.1单变量赋值:4.2底层逻辑:4.3总结:5.变量进...
    99+
    2024-04-02
  • Python基础之元编程知识总结
    目录一、前言二、ImportTime vs RunTime三、元类四、装饰器五、对数据的抽象–描述符六、控制子类的创建——代替元类的方法一、前言 首先说,Python中一切皆对象,老...
    99+
    2024-04-02
  • Python基础知识之函数,类,模块
    目录1、Function 函数1)定义函数2)参数设置3)全局和局部变量2、Class类1)定义class2)class的功能3)继承4)私有属性和功能5)特殊方法3、Module模...
    99+
    2024-04-02
  • 计算机基础知识
    一、为何要学习计算机基础?            好多人觉得自己有点基础就都想着直接敲代码,觉得基础知识很容易,很简单,就不怎么用心去学。然而,我觉得基础知识很重要。就像盖一栋楼房一样,你先要打好地基,再去盖房。        Pytho...
    99+
    2023-01-31
    计算机基础知识
  • python基础知识总结
    ...
    99+
    2023-01-31
    基础知识 python
  • Python 基础知识学习
    1、Python 基础教程      Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。2、执行Python程序     实例(Python 2.0+)     print "Hello, World!";  3、环境搭建...
    99+
    2023-01-31
    基础知识 Python
  • python基础知识笔记
    参考视频和资料:2022新版黑马程序员python教程,8天python从入门到精通,学python看这套就够了_哔哩哔哩_bilibili 最后有知识的思维导图!  Python入门学习 Day1 解释器:pycharm 一、Pychar...
    99+
    2023-08-31
    pycharm ide python
  • Python基础知识: 元组
    Python的元组与列表类似,不同之处在于元组的元素不能修改。 元组使用小括号,列表使用方括号。 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。 如下实例: tup1 = ('physics', 'chemistry', 19...
    99+
    2023-01-31
    基础知识 Python
  • Python变量基础知识
    目录1.什么是变量2.变量的命名规则3.python中的关键字和保留字4.常用的变量名5.变量的赋值6.变量的数据类型6.1.数字6.2.布尔类型6.3.字符串6.4.type()函...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作