用python做机械结构_python项目---堡垒机

作业需求:

1. 所有的用户操作日志要保留在数据库中

2. 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码

3. 允许用户对不同的目标设备有不同的访问权限,例:

对10.0.2.34 有mysql 用户的权限

对192.168.3.22 有root用户的权限

对172.33.24.55 没任何权限

4. 分组管理,即可以对设置进行分组,允许用户访问某组机器,但对组里的不同机器依然有不同的访问权限

思路解析:

1. 用户操作日志要保留在数据库中,通过课堂学习对paramiko源码进行修改,在demons/interactive.py 63行中获取用户操作,并将操作记录到数据库中。

2. 后面的需求使用数据库,建立多对多关联,反向取主机IP,主机密码,对应的堡垒机用户,并划分组内用户权限 ,具体使用sqlalchemy模块对数据库表进行操作。

3. 针对作业需求,程序添加了查看日志功能,并准许默认用户root查看所有用户操作,其他用户只能查自己下面机器的日志。

4. 添加了缓存redis减少了数据库IO操作。

paramiko 用户操作记录源码:

cmd =[]whileTrue:

r, w, e= select.select([chan, sys.stdin], [], []) # 默认阻塞if chan inr: # 连接建立好了,channle过来有数据了,try:

x= u(chan.recv(1024)) # 尝试收数据if len(x) == 0: # 收数据收不到,

sys.stdout.write('\r\n*** EOF\r\n')breaksys.stdout.write(x) # 标准输出

sys.stdout.flush() # flush 怕输出不到,远程发来的数据,远程机器返回

except socket.timeout:

passif sys.stdin inr: # 标准输入 活动就能返回到r

x= sys.stdin.read(1)if len(x) == 0:break

if x == "\r":

cmd_str= "".join(cmd)

print("---->",cmd_str)

cmd=[]else:

cmd.append(x)

chan.send(x)

表结构设计图:

1256206-20171219112256631-129124524.png

README:

开发环境: python3.6参考博客: https://www.cnblogs.com/sean-yao/p/8064885.html

程序介绍1. 所有的用户操作日志要保留在数据库中2. 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码3. 允许用户对不同的目标设备有不同的访问权限,例:

对10.0.2.34有mysql 用户的权限

对192.168.3.22有root用户的权限

对172.33.24.55没任何权限4. 分组管理,即可以对设置进行分组,允许用户访问某组机器,但对组里的不同机器依然有不同的访问权限

文件目录结构

├── bin

│ ├── __init__.py

│ └── tiny.py # 主程序

├── conf

│ ├── action_registers.py # 程序命令交互

│ ├── __init__.py

│ ├── __pycache__

│ │ ├── action_registers.cpython-36.pyc

│ │ ├── __init__.cpython-36.pyc

│ │ └── settings.cpython-36.pyc

│ └── settings.py # 配置文件

├── log

│ └── __init__.py

├── models

│ ├── __init__.py

│ ├── models_backup.py # 备份测试

│ ├── models.py # 数据库表模块

│ ├── __pycache__

│ │ ├── __init__.cpython-36.pyc

│ │ └── models.cpython-36.pyc

│ └── test.py # redis测试

├── modules

│ ├── actions.py # 欢迎页和程序命令交互

│ ├── common_filters.py # 堡垒机用户主机绑定交互

│ ├── db_conn.py # mysql连接交互

│ ├── __init__.py

│ ├── interactive.py # ssh传输命令和命令写入交互

│ ├── __pycache__

│ │ ├── actions.cpython-36.pyc

│ │ ├── common_filters.cpython-36.pyc

│ │ ├── db_conn.cpython-36.pyc

│ │ ├── __init__.cpython-36.pyc

│ │ ├── interactive.cpython-36.pyc

│ │ ├── ssh_login.cpython-36.pyc

│ │ ├── utils.cpython-36.pyc

│ │ └── views.cpython-36.pyc

│ ├── ssh_login.py # ssh连接交互

│ ├── utils.py # yaml配置交互

│ └── views.py # 创建表,表数据创建,查看数据库数据交互

├── Server.zip

└── share

└── examples

├── new_bindhosts.yml # 主机绑定关系配置文件

├── new_groups.yml # 组创建,组关系绑定配置文件

├── new_hosts.yml # 主机配置文件

├── new_remoteusers.yml # 主机用户名密码配置文件

└── new_user.yml # 堡垒机用户配置文件

创建表和使用方法:

先要创建数据库:

create database tinytest charset utf8;1. python3 bin/tiny.py syncdb2. python3 bin/tiny.py create_hosts -f share/examples/new_hosts.yml3. python3 bin/tiny.py create_remoteusers -f share/examples/new_remoteusers.yml4. python3 bin/tiny.py create_users -f share/examples/new_user.yml5. python3 bin/tiny.py create_groups -f share/examples/new_groups.yml6. python3 bin/tiny.py create_bindhosts -f share/examples/new_bindhosts.yml7. python3 bin/tiny.py start_session

程序核心代码:

程序测试样图:

1. 创建表和插入表数据

1256206-20171219122102350-1491088751.png

2. 查看绑定关系

1256206-20171219120327318-1568480647.png

1256206-20171219120407412-423093807.png

3. 登陆和写入命令

1256206-20171219121522678-1535521531.png

4. 不同用户权限,组权限,登陆权限和查看日志权限

1256206-20171219120824381-120477887.png

1256206-20171219120942396-1369950614.png

1256206-20171219121054100-66148118.png

1256206-20171219122608975-1148989413.png

遇到的报错1:

redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a byte, stringor number first.

解决:

https://www.xuanlv1998.cn/2019/07/23/python-zhong-yi-xie-guan-yu-redis-shi-yong-de-keng/

对redis降版:

pip3 install-U redis==2.10.6 #将当前版本降级到2.10.6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值