堡垒机的用途:(对权限进行集中管理)

1、权限管理

  权限分配混乱

2、用户行为审计,记录用户的操作。

 

 先用一下paramiko:|

用ssh第一次连接 远程某个机器的时候,需要验证。

docker 堡垒机 堡垒机命令_linux

 只要known hosts中有这太机器的标示,那么下次登录就不需要验证了。

 

docker 堡垒机 堡垒机命令_docker 堡垒机_02

 

 

 所以在paramiko模拟ssh连接的时候要写:(可执行多条命令)

下面这个自动帮我们填写yes的还帮我们自动在本地上生成了.ssh文件和里面的kown_hosts标示,有了这个known_hosts之后,下次这台机器再登陆远程服务器就不要验证了

docker 堡垒机 堡垒机命令_docker 堡垒机_03

 

docker 堡垒机 堡垒机命令_linux_04

 

 sftp协议:ssh自带的协议(安全的文件传输)

 

docker 堡垒机 堡垒机命令_linux_05

看基于paramiko的上传下载:以后想批量分发一个文件或者执行一条命令,也可以用它。通过多线程或者多进程进行并发。

docker 堡垒机 堡垒机命令_docker 堡垒机_06

 

vim中 !more指令:

docker 堡垒机 堡垒机命令_docker 堡垒机_07

 

 

find命令:

 

docker 堡垒机 堡垒机命令_python_08

 

但是上面的模块也是连接一次执行一次命令之后就断开了,我们想连上之后可以进行持续的交互,在paramiko中就需要一个叫做demo的文件。但是通过pip安装是没有这个文件的。

 

docker 堡垒机 堡垒机命令_linux_09

 

 

docker 堡垒机 堡垒机命令_堡垒机_10

 

 然后将它放到shell中看一下:

docker 堡垒机 堡垒机命令_python_11

 

 解压之后执行这个命令:

docker 堡垒机 堡垒机命令_docker 堡垒机_12

 

 这样就能输入命令top查看cpu状态,就发现是实时交互的了,并且可以进入vim中。但是用户体验不好,显示也会出问题。

这就是paramiko的缺点。

 看一下demo是如何实现实时 交互的和行为记录的:

docker 堡垒机 堡垒机命令_堡垒机_13

 

docker 堡垒机 堡垒机命令_堡垒机_14

 

 

docker 堡垒机 堡垒机命令_python_15

 

 

docker 堡垒机 堡垒机命令_堡垒机_16

 posix是linux下的一个协议标准,看到他就带表的是linux:

 

docker 堡垒机 堡垒机命令_linux_17

 select检测输入和输出:

docker 堡垒机 堡垒机命令_python_18

 一旦有输入或者输出,select就会有返回

docker 堡垒机 堡垒机命令_linux_19

 

 

docker 堡垒机 堡垒机命令_linux_20

 

 

docker 堡垒机 堡垒机命令_python_21

ssh远程肯定有个判断是回车\r的机制,然后遇到回车就执行获得的命令。

 

 

docker 堡垒机 堡垒机命令_python_22

 

 

docker 堡垒机 堡垒机命令_docker 堡垒机_23

docker 堡垒机 堡垒机命令_python_24

 

然后连接的时候,在设置好对应的host和密码,那么就不需要自己在输入host和密码,最后再将用户体验搞好,就和ssh一样了,但是体验搞不好。。。。

所以基于paramiko来做堡垒机非常的不好。并且select的效率也不高,并发效率不高。

 

docker 堡垒机 堡垒机命令_linux_25

 

hostuser命令:以后可以用来标示每台机器是干嘛用的:

docker 堡垒机 堡垒机命令_python_26

 

 

 大致的表结构:

docker 堡垒机 堡垒机命令_python_27

 

堡垒机就是操作的第三张表,将第三章表的权限进行分配,堡垒机用户登陆堡垒机,就只显示他所能登陆的主机和主机用户名。

如果用上面的userprofile表直接关联host主机表的话,那么所以能登陆这个主机的主机用户hostuser,小虎就都能用了,所以不好,

不让主机组和主机进行关联也是这个意思,权限不好分配。

 

 

用户认证的脚本(单独一个py文件,在django中如果想调用models,需要配制内容)

docker 堡垒机 堡垒机命令_堡垒机_28

 

 getpass:

docker 堡垒机 堡垒机命令_python_29

 

绕过ssh连接远程时的fingerprint验证:命令

docker 堡垒机 堡垒机命令_python_30

但是呢,在python中怎么输入密码呢,也是不可以的,所以也需要配制好,让它自动填写密码,这就需要下面的插件了:

sshpass:首先要下载,然后安装:

docker 堡垒机 堡垒机命令_docker 堡垒机_31

 tar  xvzf  文件名

docker 堡垒机 堡垒机命令_堡垒机_32

 

解压之后发现这是个c语言写的包:

 

 python是解释型语言:传给解释器的是源码,解释器自行解释为机器码。

c语言是编译型语言:需要编译,编译成机器码才能运行

 

在linux上c语言软件的编译过程是这样的:

 1.configure:后面不加参数就会编译在系统默认的路径下。

docker 堡垒机 堡垒机命令_docker 堡垒机_33

 

2:编译 sudo make

docker 堡垒机 堡垒机命令_堡垒机_34

 

 3:编译完成后安装:sudo make install 

docker 堡垒机 堡垒机命令_堡垒机_35

 

docker 堡垒机 堡垒机命令_linux_36

 

 4:可以直接输入sshpass来查看:

docker 堡垒机 堡垒机命令_python_37

 

 5:然后绕过密码进入机器。

docker 堡垒机 堡垒机命令_堡垒机_38

 

~/ 看家目录:

 

docker 堡垒机 堡垒机命令_堡垒机_39

 

如果是第一次连接

docker 堡垒机 堡垒机命令_python_40

 

docker 堡垒机 堡垒机命令_python_41

所以要用subprocess.run()方法:

docker 堡垒机 堡垒机命令_linux_42

 

 

docker 堡垒机 堡垒机命令_docker 堡垒机_43

 

 more /etc/passwd

 

docker 堡垒机 堡垒机命令_堡垒机_44

docker 堡垒机 堡垒机命令_python_45

docker 堡垒机 堡垒机命令_堡垒机_46

 

docker 堡垒机 堡垒机命令_linux_47

 

 

docker 堡垒机 堡垒机命令_堡垒机_48

 

 su - 命令

docker 堡垒机 堡垒机命令_python_49

 

 sudo passwd qq:

docker 堡垒机 堡垒机命令_linux_50

 

然后su - qq,切换到qq用户,发现不能进入/bin/false终端,因为等于false,说明不能进入这个终端。(自己查原因)

以上的这些举例是说明,用户登录的终端是可以配置的。我们配置一个专门用来登陆堡垒机的账户。

docker 堡垒机 堡垒机命令_python_51

 

 修改终端样式。

docker 堡垒机 堡垒机命令_linux_52

 

 

docker 堡垒机 堡垒机命令_堡垒机_53

 

docker 堡垒机 堡垒机命令_docker 堡垒机_54

 

 

django在linux上安装的情况:下面的原因为每个用户都有自己使用的django版本什么的,所以自己安装自己的。

docker 堡垒机 堡垒机命令_linux_55

 

docker 堡垒机 堡垒机命令_docker 堡垒机_56

 

docker 堡垒机 堡垒机命令_docker 堡垒机_57

 

 

docker 堡垒机 堡垒机命令_docker 堡垒机_58

 

docker 堡垒机 堡垒机命令_docker 堡垒机_59

 

 

docker 堡垒机 堡垒机命令_linux_60

 

 这样给每个用户的就不是linux的账户(就是主机账户)了,而是我的堡垒机账户。

docker 堡垒机 堡垒机命令_堡垒机_61

 

docker 堡垒机 堡垒机命令_堡垒机_62

 

 

docker 堡垒机 堡垒机命令_堡垒机_63

 

 

docker 堡垒机 堡垒机命令_linux_64

实际上他没有自己的账户,因为已经被回收了,只有堡垒机账户,只要按ctrl+c那么就退出了python的执行脚本,因为.bashrc里面已经配置了,python执行脚本后面就紧跟着logout了,所以就断开了远程的连接。不能再执行其他的了

 

ctrl+u:

docker 堡垒机 堡垒机命令_python_65

 

 

 

在djang中用自己写的userprofile表时需要配制:

docker 堡垒机 堡垒机命令_linux_66