用pthon来写个跳板机

用pthon来写个跳板机

 

一、需求

程序一:
一、后台管理
- 堡垒机上建立用户和密码(堡垒机root封装的类,UserProfile表)
- .bashrc 
/usr/bin/python3 /data/bastion.py
exit

二、后台管理
- 服务器上建立用户和密码 或 公钥上传
- 服务器帐号 -> 人 关联

程序二:
三、用户登陆html

- ssh 堡垒机用户名@堡垒机IP
- 获取当前用户 os.environ[‘USER‘]
- 获取当前用户的主机列表
- 获取选中的主机下的全部用户
- 选择任何一个用户python

二、实现思路

技术分享

堡垒机执行流程:sql

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

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

那么须要用到的点:服务器

  1. 一、使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 全部组件对数据进行操做。根据类建立对象,对象转换成SQL,执行SQL。
  2. 二、paramiko模块,基于SSH用于链接远程服务器并执行相关操做。

 

具体实现流程:session

  1. 设计表机构
  2. 建立表结构
  3. 利用paramiko模块去实现跳板机底层的ssh链接并执行相关操做
  4. 将底层的链接封装成跳板机用户对指定主机组和用户的操做并记录日志

 

三、表结构设计

技术分享

 技术分享

技术分享

技术分享

技术分享

 

技术分享
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 from sqlalchemy import create_engine, and_, or_, func, Table
 5 from sqlalchemy.ext.declarative import declarative_base
 6 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, DateTime
 7 from sqlalchemy.orm import sessionmaker, relationship
 8 
 9 Base = declarative_base()  # 生成一个SqlORM 基类
10 
11 
12 class Host(Base):
13     __tablename__ = ‘host‘
14     id = Column(Integer, primary_key=True, autoincrement=True)
15     hostname = Column(String(64), unique=True, nullable=False)
16     ip_addr = Column(String(128), unique=True, nullable=False)
17     port = Column(Integer, default=22)
18 
19 
20 class HostUser(Base):
21     __tablename__ = ‘host_user‘
22     id = Column(Integer, primary_key=True, autoincrement=True)
23     username = Column(String(64), unique=True, nullable=False)
24     AuthTypes = [
25         (‘p‘, ‘SSH/Password‘),
26         (‘r‘, ‘SSH/KEY‘),
27     ]
28     auth_type = Column(String(16))
29     cert = Column(String(255))
30 
31     host_id = Column(Integer, ForeignKey(‘host.id‘))
32 
33     __table_args__ = (
34         UniqueConstraint(‘host_id‘, ‘username‘, name=‘_host_username_uc‘),
35     )
36 
37 
38 class Group(Base):
39     __tablename__ = ‘group‘
40     id = Column(Integer, primary_key=True, autoincrement=True)
41     name = Column(String(64), unique=True, nullable=False)
42 
43 
44 class UserProfile(Base):
45     __tablename__ = ‘user_profile‘
46     id = Column(Integer, primary_key=True, autoincrement=True)
47     username = Column(String(64), unique=True, nullable=False)
48     password = Column(String(255), nullable=False)
49 
50 
51 class Group2UserProfile(Base):
52     __tablename__ = ‘group_2_user_profile‘
53     id = Column(Integer, primary_key=True, autoincrement=True)
54     user_profile_id = Column(Integer, ForeignKey(‘user_profile.id‘))
55     group_id = Column(Integer, ForeignKey(‘group.id‘))
56     __table_args__ = (
57         UniqueConstraint(‘user_profile_id‘, ‘group_id‘, name=‘ux_user_group‘),
58     )
59 
60 
61 class Group2HostUser(Base):
62     __tablename__ = ‘group_2_host_user‘
63     id = Column(Integer, primary_key=True, autoincrement=True)
64     host_user_id = Column(Integer, ForeignKey(‘host_user.id‘))
65     group_id = Column(Integer, ForeignKey(‘group.id‘))
66     __table_args__ = (
67         UniqueConstraint(‘group_id‘, ‘host_user_id‘, name=‘ux_group_host_user‘),
68     )
69 
70 
71 class UserProfile2HostUser(Base):
72     __tablename__ = ‘user_profile_2_host_user‘
73     id = Column(Integer, primary_key=True, autoincrement=True)
74     host_user_id = Column(Integer, ForeignKey(‘host_user.id‘))
75     user_profile_id = Column(Integer, ForeignKey(‘user_profile.id‘))
76     __table_args__ = (
77         UniqueConstraint(‘user_profile_id‘, ‘host_user_id‘, name=‘ux_user_host_user‘),
78     )
79 
80 
81 class AuditLog(Base):
82     __tablename__ = ‘audit_log‘
83     id = Column(Integer, primary_key=True, autoincrement=True)
84 
85     action_choices2 = [
86         (u‘cmd‘, u‘CMD‘),
87         (u‘login‘, u‘Login‘),
88         (u‘logout‘, u‘Logout‘),
89     ]
90     action_type = Column(String(16))
91     cmd = Column(String(255))
92     date = Column(DateTime)
93     user_profile_id = Column(Integer, ForeignKey(‘user_profile.id‘))
94     host_user_id = Column(Integer, ForeignKey(‘host_user.id‘))
95 
96 表结构示例
表结构设计
相关文章
相关标签/搜索