堡垒机实战

堡垒机前戏

开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码上传下载


1

2

3

4

5

6

7

8

9

10

11

12

import paramiko

transport = paramiko.Transport((‘hostname‘,22))

transport.connect(username=‘wupeiqi‘,password=‘123‘)

sftp = paramiko.SFTPClient.from_transport(transport)

# 将location.py 上传至服务器 /tmp/test.py

sftp.put(‘/tmp/location.py‘‘/tmp/test.py‘)

# 将remove_path 下载到本地 local_path

sftp.get(‘remove_path‘‘local_path‘)

transport.close()

基于公钥密钥上传下载


1

2

3

4

5

6

7

8

9

10

11

12

13

14

import paramiko

private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)

transport = paramiko.Transport((‘hostname‘22))

transport.connect(username=‘wupeiqi‘, pkey=private_key )

sftp = paramiko.SFTPClient.from_transport(transport)

# 将location.py 上传至服务器 /tmp/test.py

sftp.put(‘/tmp/location.py‘‘/tmp/test.py‘)

# 将remove_path 下载到本地 local_path

sftp.get(‘remove_path‘‘local_path‘)

transport.close()

堡垒机的实现

实现思路:

堡垒机执行流程:

  1. 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码)
  2. 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表
  3. 用户选择服务器,并自动登陆
  4. 执行操作并同时将用户操作记录

注:配置.brashrc实现ssh登陆后自动执行脚本,如:/usr/bin/python /home/wupeiqi/menu.py

实现过程

步骤一,实现用户登陆


1

2

3

4

5

6

7

8

import getpass

user = raw_input(‘username:‘)

pwd = getpass.getpass(‘password‘)

if user == ‘alex‘ and pwd == ‘123‘:

    print ‘登陆成功‘

else:

    print ‘登陆失败‘

步骤二,根据用户获取相关服务器列表


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

dic = {

    ‘alex‘: [

        ‘172.16.103.189‘,

        ‘c10.puppet.com‘,

        ‘c11.puppet.com‘,

    ],

    ‘eric‘: [

        ‘c100.puppet.com‘,

    ]

}

host_list = dic[‘alex‘]

print ‘please select:‘

for index, item in enumerate(host_list, 1):

    print index, item

inp = raw_input(‘your select (No):‘)

inp = int(inp)

hostname = host_list[inp-1]

port = 22

步骤三,根据用户名、私钥登陆服务器


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

tran = paramiko.Transport((hostname, 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(‘wupeiqi‘, key)

# 打开一个通道

chan = tran.open_session()

# 获取一个终端

chan.get_pty()

# 激活器

chan.invoke_shell()

#########

# 利用sys.stdin,肆意妄为执行操作,

# 用户在终端输入内容

# 堡垒机读取用户输入

# 将用户输入内容发送到远程服务器并获取结果

#########

chan.close()

tran.close()

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‘,
                break
            sys.stdout.write(x)
            sys.stdout.flush()
        except socket.timeout:
            pass
    if sys.stdin in readable:
        inp = sys.stdin.readline()
        chan.sendall(inp)

# 获取原tty属性
oldtty = termios.tcgetattr(sys.stdin)
try:
    # 为tty设置新属性
    # 默认当前tty设备属性:
    #   输入一行回车,执行
    #   CTRL+C 进程退出,遇到特殊字符,特殊处理。

    # 这是为原始模式,不认识所有特殊符号
    # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
    tty.setraw(sys.stdin.fileno())
    chan.settimeout(0.0)

    while True:
        # 监视 用户输入 和 远程服务器返回数据(socket)
        # 阻塞,直到句柄可读
        r, w, e = select.select([chan, sys.stdin], [], [], 1)
        if chan in r:
            try:
                x = chan.recv(1024)
                if len(x) == 0:
                    print ‘\r\n*** EOF\r\n‘,
                    break
                sys.stdout.write(x)
                sys.stdout.flush()
            except socket.timeout:
                pass
        if sys.stdin in r:
            x = sys.stdin.read(1)
            if len(x) == 0:
                break
            chan.send(x)

finally:
    # 重新设置终端属性
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

def windows_shell(chan):
    import threading

    sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")

    def writeall(sock):
        while True:
            data = sock.recv(256)
            if not data:
                sys.stdout.write(‘\r\n*** EOF ***\r\n\r\n‘)
                sys.stdout.flush()
                break
            sys.stdout.write(data)
            sys.stdout.flush()

    writer = threading.Thread(target=writeall, args=(chan,))
    writer.start()

    try:
        while True:
            d = sys.stdin.read(1)
            if not d:
                break
            chan.send(d)
    except EOFError:
        # user hit ^Z or F6
        pass

注:密码验证 t.auth_password(username, pw)

详见:paramiko源码demo

数据库操作

Python 操作 Mysql 模块的安装


1

2

3

4

5

linux:

    yum install MySQL-python

window:

    http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

SQL基本使用

1、数据库操作


1

2

3

show databases;

use [databasename];

create database  [name];

2、数据表操作


1

2

3

4

5

6

7

8

9

10

show tables;

create table students

    (

        id int  not null auto_increment primary key,

        name char(8not null,

        sex char(4not null,

        age tinyint unsigned not null,

        tel char(13) null default "-"

    );

CREATE TABLE `wb_blog` (
    `id` smallint(8) unsigned NOT NULL,
    `catid` smallint(5) unsigned NOT NULL DEFAULT ‘0‘,
    `title` varchar(80) NOT NULL DEFAULT ‘‘,
    `content` text NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `catename` (`catid`)
) ; 

3、数据操作


1

2

3

4

5

6

7

insert into students(name,sex,age,tel) values(‘alex‘,‘man‘,18,‘151515151‘)

delete from students where id =2;

update students set name = ‘sb‘ where id =1;

select * from students

4、其他


1

2

3

主键

外键

左右连接

Python MySQL API

一、插入数据


1

2

3

4

5

6

7

8

9

10

11

12

13

14

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)

cur = conn.cursor()

reCount = cur.execute(‘insert into UserInfo(Name,Address) values(%s,%s)‘,(‘alex‘,‘usa‘))

conn.commit()

cur.close()

conn.close()

print reCount

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)

cur = conn.cursor()

li =[
     (‘alex‘,‘usa‘),
     (‘sb‘,‘usa‘),
]
reCount = cur.executemany(‘insert into UserInfo(Name,Address) values(%s,%s)‘,li)

conn.commit()
cur.close()
conn.close()

print reCount

注意:cur.lastrowid

二、删除数据


1

2

3

4

5

6

7

8

9

10

11

12

13

14

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)

cur = conn.cursor()

reCount = cur.execute(‘delete from UserInfo‘)

conn.commit()

cur.close()

conn.close()

print reCount

三、修改数据


1

2

3

4

5

6

7

8

9

10

11

12

13

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)

cur = conn.cursor()

reCount = cur.execute(‘update UserInfo set Name = %s‘,(‘alin‘,))

conn.commit()

cur.close()

conn.close()

print reCount

四、查数据


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

# ############################## fetchone/fetchmany(num)  ##############################

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)

cur = conn.cursor()

reCount = cur.execute(‘select * from UserInfo‘)

print cur.fetchone()

print cur.fetchone()

cur.scroll(-1,mode=‘relative‘)

print cur.fetchone()

print cur.fetchone()

cur.scroll(0,mode=‘absolute‘)

print cur.fetchone()

print cur.fetchone()

cur.close()

conn.close()

print reCount

# ############################## fetchall  ##############################

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)

#cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

cur = conn.cursor()

reCount = cur.execute(‘select Name,Address from UserInfo‘)

nRet = cur.fetchall()

cur.close()

conn.close()

print reCount

print nRet

for in nRet:

    print i[0],i[1]

时间: 2024-08-01 23:20:58

堡垒机实战的相关文章

项目实战15.2—企业级堡垒机 jumpserver快速入门

本文收录在Linux运维企业架构实战系列 必备条件 硬件条件 ① 一台安装好 Jumpserver 系统的可用主机(堡垒机) ② 一台或多台可用的 Linux.Windows资产设备(被管理的资产) 服务条件 (1)coco服务 ① 鉴于心态检测存在延迟,也可以直接在 Jumpserver 主机上执行如下命令检测 Coco 是否存活,Coco 服务默认使用 2222 端口: [root@centos7-1 ~]# ss -nutlp |grep 2222 效果如下: ② 如 coco 不在线或者

webterminal堡垒机平台安装使用实战

作为合格的运维铲屎官,将无论是windows服务器还是Linux服务器还是交换机设备等进行一站式管理起来,并对用户行为进行实时监控审计,有效避免删库跑路事件发生!对不规范的操作行为说不!在有限的预算甚至是没有预算的情况下搭建一个有效的管理运维平台是每个运维从业人员的痛!如果公司没有足够的预算去购买商业堡垒机,甚至没有预算,那么webterminal将会是您最佳的选择.Webterminal旨在为中小型企业提供一套完整的运维审计堡垒机功能.目前webterminal支持ssh.sftp.rdp.t

运维堡垒机开发

Python之路 那就做个堡垒机吧 本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也

Python之路,Day13 - 堡垒机

项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人操作业务系

day13--开发堡垒机

本节内容 项目实战:运维堡垒机开发      商业:<齐治--堡垒机>     前景介绍        https://www.cnblogs.com/alex3714/articles/5286889.html 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机

day11 堡垒机

项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人操作业务系

Python 13 简单项目-堡垒机

本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人

主机管理+堡垒机系统开发:审计回顾

一.创建用户并授权 1.创建用户.设置密码 [[email protected] CrazyEye]useradd audit [[email protected] CrazyEye]# passwd audit Changing password for user audit. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authen

基于Docker搭建Jumpserver堡垒机操作实践

一.背景 笔者最近想起此前公司使用过的堡垒机系统,觉得用的很方便,而现在的公司并没有搭建此类系统,想着以后说不定可以用上:而且最近也有点时间,因此来了搭建堡垒机系统的兴趣,在搭建过程中参考了比较多的文档,其中最详细的还是官方文档,地址如下所示: Jumpserver 文档 二.操作概要 1. 系统运行 2. 配置入门 3. 测试验证 三.系统运行 在官方文档中安装堡垒机有很多种方法,这让笔者有些纠结,另外而且在不同系统中安装方法也不一致,不过正在徘徊不定时,发现一种通用的安装方法,便是采用doc