今天看见运维堡垒机,感觉很有意思,就学着搭建了一个简单的。可以实现进行中专,记录命令等基本功能。
原理:
如图所示,运维区人员访问堡垒机,通过堡垒机再访问工作区域。在堡垒机上的一切操作,都将被记录下来,从而达到追踪目的。
而shellinabox则是将登陆过程web化。
shellinabox下载地址:
http://shellinabox.googlecode.com/files/shellinabox-2.14.tar.gz #谷歌已经被封,挂VPN下载
或者各位大哥,打赏我一点积分,这里面有paramiko,shellinabox两个的包 :
https://download.csdn.net/download/zfx1997/10336230
=================================================
安装部署成功后,查看paramiko下的demos中的demo.py。该文件是封装SSH的,运行它可以连接登陆其余的主机。
168 print('*** Here we go!\n')
169 interactive.interactive_shell(chan) ##运行后判断该句是调用的登陆模块
170 chan.close()
171 t.close()
再查看interactive.py:
33 def interactive_shell(chan):
34 if has_termios:
35 posix_shell(chan) ##很明显,linux系统调用的是posix_shell
36 else:
37 windows_shell(chan)
40 def posix_shell(chan):
41 #f=file('/tmp/audit.log','a+') ##这句为我修改的,创建了一个file,可以往里面添加东西,其实就是添加执行的语句
42 import select
43
44 oldtty = termios.tcgetattr(sys.stdin)
45 try:
46 tty.setraw(sys.stdin.fileno())
47 tty.setcbreak(sys.stdin.fileno())
48 chan.settimeout(0.0)
49
50 while True:
51 r, w, e = select.select([chan, sys.stdin], [], [])
52 if chan in r:
53 try:
54 x = u(chan.recv(1024))
55 if len(x) == 0:
56 sys.stdout.write('\r\n*** EOF\r\n')
57 break
58 sys.stdout.write(x)
59 sys.stdout.flush()
60 except socket.timeout:
61 pass
62 if sys.stdin in r:
63 x = sys.stdin.read(1)
64 #f.write(x) ##将输入行的命令写入我所创建的文件
65 #f.flush() ##刷新
66 if len(x) == 0:
67 break
68 chan.send(x)
69
70 finally:
71 termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
之后进行测试。通过demo.py连接一台主机。连接成功后,查看/tmp/audit.log是否有记录。
安装shellinabox后,修改登陆用户的.bashrc,使得该用户一登陆即执行demo.py文件
然后执行./shellinabox -t(可以跳过认证)
之后访问“主机IP:4200”进行登陆。