十九、安全工具:jumpserver

(一)基本概念

1、web集群架构
下图就是一个web集群架构,就是按功能分门别类的一组组服务器组。

jumpserver升级docker pulling image_服务器

6是负载均衡的服务器组,有nginx 7层负载均衡主备和LVS四层负载均衡主备。
5是web集群应用服务器组,比如tomcat,java,php等。
3是数据库,比如缓存型数据库redius、mysql关系型数据库,以及mfs和rsync这样的共享存储服务器组。
4是ansible和zabbix,是对服务器进行批量化管理和监控的。

2、什么是跳板机
企业上面的这些6534服务器组是不能在公网中暴露的,是要运行在内网环境中的。但是,外部网站用户要享受企业提供的web服务,就要通过互联网+账号密码,能连接上这个集群中的某台服务器,才能被提供服务。那外网用户都能连接上我们的服务器,那我们是不是就要担心我们服务器的安全。如果哪个外网用户是个黑客,我们服务器就有被破坏的风险。那如何保证内部服务器的安全?最基本的做法就是,VPN技术。我们可以通过vpn技术,让来自外网的用户无法直接访问我们的服务器,我们的服务器运行在内网环境中,并且躲在防火墙的后面,这样就尽可能的减少了一些乱七八糟的连接和访问。尽管是企业的员工,他如果在外地出差,不在内网环境中,他要想远程办公,他也得通过vpn技术去连接。当然如果是外网其他用户,那他是没有vpn连接权限的。
外网攻击我们可以用vpn技术,那内网环境中如何保证服务器安全呢?就是企业内部如何保证某个员工不删库,或者开发测试运维等不同员工如何进行限制。最基本的做法就是做一个跳板机,就是上图的2号机器,这个机器就是企业员工的统一入口,就是企业内部人员都要先登录2号机器,才有权利连接其他服务器。跳板机就会记录连接到它上面的所有用户的账号、登录时间、做了什么操作、甚至所有操作的过程都屏幕录制下来等,就相当于监控了。

3、什么堡垒机
堡垒机和跳板机是一个概念,只不过堡垒机比跳板机功能更多。也是通过堡垒机对服务器组进行统一管理和操作的。

jumpserver升级docker pulling image_学习_02

小结:跳板机就是一台服务器而已,企业It人员想使用内网的某个设备时,必须先连接上跳板机,然后才能登录到内网中的目标设备上进行操作和维护。就是开发测试运维都必须先登录跳板机,然后从跳板机再登录到对应的服务器。也就是企业的服务器必须通过跳板机才能登录。这样就是实现了登录安全。
但是仅仅登录安全还不行,还要实现对登录用户的行为监控和权限划分等更细颗粒的管理,就得搭建堡垒机服务器。以满足角色管理、角色授权、信息资源访问控制、操作记录和审计、系统变更和维护控制、生成服务器资产统计报表等需求。

(二)JumpServer介绍

1、jumpserver是一款堡垒机产品,我们到其官方站点看一下官方文档的介绍

jumpserver升级docker pulling image_学习_03

2、jumpserver的运行架构:
下图是jumpserver的整个运行架构 

jumpserver升级docker pulling image_笔记_04

从图上看,这个企业部署了一台jumpserver服务器和数据库服务器3,而jumpserver服务器管理着企业的另外3台服务器:veb01服务器、backup备份服务器、DB数据库服务器。
用户要先通过远程的方式连接上jumpserver服务器后,才能连接企业的另外3台服务器。
当用户连上jumpserver服务器后,jumpserver就给这个用户定义了一个模板,这个模板规定这个用户后面可以进行哪些操作,就是定义了用户怎么操作jumpserver后面管理的机器。就是jumpserver给用户设置了账号密码及权限,规定了用户能ssh后面的哪台机器、不能ssh哪台机器、以后连接上后能做哪些操作,比如连上web01后只能敲一些nginx相关的命令,或者连上backup服务器后只能敲和rsync命令,同理,连上数据库服务器就只能做一些数据库操作,其他操作就被禁止。并且用户敲的这些命令全部存储到数据库服务器3里面,而服务器3可以将用户的操作以网页方式展示或者以录屏的方式展示出来。

3、jumpserver的组件介绍

jumpserver升级docker pulling image_zabbix_05

 jupmserver采用组件化开发的形式,由5个组件共同完成jumpserver的服务。所以我们要正确运行jumpserver就要有上面的5个组件:

LINA组件用于展示前端页面;

Luna组件是一个web terminal。当我们想远程连接一台服务器时,我们平常的做法是,打开我们本地的命令行终端,比如打开我们本地的xhsell终端,开启一个会话,然后ssh连接上目标服务器,然后再进行各种操作。但现在luna组件给我们提供一个更便捷的新方法,就是提供一个网页终端web terminal,去连接目标服务器。就是通过浏览器连接上一个服务器并进行管理。

CORE组件是后台核心组件,是用django框架开发的。我们只要把组件的代码下载下来并部署好,能用就可以了。

coco组件也是一个后台组件,是支持luna组件提供的web terminal功能的。

guacamole组件是支持插件功能的。

4、jumpserver的核心架构说明
就是介绍用户使用jumpserver的流程:

jumpserver升级docker pulling image_学习_06

用户A可以通过网站的形式(B1, web terminal)去访问jumpserver,也可以通过ssh(B2,命令行终端)去访问jumpserver服务器。不管用户是通过http还是ssh访问jumpserver服务器,jumpserver服务器的80端口都运行着nginx,我们就可以使用nginx的反向代理功能,用户的不管是http请求还是ssh请求,就被nginx转发了:

当请求路径是默认啥也没有的时候,就是/ 的时候,nginx就把请求直接转发给jumpserver的后台core了,jumpsever再看请求的内容,它一是可以去读数据库(D1),二是它可以调用ansible的api,进行服务器的批量化操作。

当请求路径带socket字段的时候,nginx就把请求转发给C3组件,C3组件处理完毕请求后将结果发给jumperserver的core组件,core组件再根据请求要么去读数据库要么请求ansible进行批量管理。

当请求路径带/组件的时候,nginx就转发到C4,C4处理完,再转给jumperserver core,再处理。

当请求路径带/luna,nginx就转发到luna组件,由luna组件处理完毕直接返回给用户A。

小结:实质就是nginx做了一个反向代理,代理jumpserver的一些核心组件。所以我们要运行jumpserver就要运行起它的各个组件和数据库。

5、jumpserver运行的基础环境
物理机、虚拟机、云服务器都可以,本次我们用本地虚拟机。硬件配置如下:

jumpserver升级docker pulling image_python_07

(三)安装部署jumpserver

1、虚拟机配置
硬件配置:2个cpu,4G内存,至少50G硬盘,因为屏幕录制功能非常占磁盘空间。

jumpserver升级docker pulling image_学习_08

软件环境配置:
要想运行jumpserver,你机器还必须有以下软件:
(1)python=3.6.xx ,因为jumpserver是由python语言写的。旧的版本jumpserver是由python2写的,新版本jumpserver是由python3写的。我们本次演示的是新版本。linux系统内置有python2解释器,但我们还需要至少是3.6以上版本的python。
(2)mysql server 必须大于等于5.6。但是现在mysql收费了,如果你用的是免费的mariadb,那版本也必须大于等于5.6。
(3)redius 数据库。

2、环境初始化

jumpserver升级docker pulling image_笔记_09

3、配置yum源
这里配置阿里云的yum源以及epel源。这部分内容前面反复讲过好几遍了,这里就省略了。

4、安装系统初始化所需的软件
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel gcc zlib zlib-devel openssl openssl-devel

5、安装jumpserver运行所依赖的环境
yum install -y git python-pip gcc automake autoconf python-devel vim sshpass readline-devel
我们获取的jumpserver代码,是在全球最大的代码托管平台github上下载的,所以我们得安装git工具才能从github上下载。
automake是自动编译

6、修改系统的字符集,改为中文
因为后期jumpserver的配置文件中也有很多中文,而且这个软件是我国公司开发的开源软件,还有很多中文支持,所以我们就用中文。

jumpserver升级docker pulling image_笔记_10

 7、部署数据库mysql5.6.49

jumpserver这个软件要运行,它就得存储数据,那数据就得写到mysql里面,所以我们要安装mysql5.6。

本部分你也可以参照(十二)软件包管理的最后部分的案例,就是下载并安装mysql5.6版本的案例。

当然你也可以参照我这里的步骤,我这里就简单演示了:

jumpserver升级docker pulling image_python_11

 

jumpserver升级docker pulling image_服务器_12

jumpserver升级docker pulling image_python_13

jumpserver升级docker pulling image_zabbix_14

jumpserver升级docker pulling image_python_15

jumpserver升级docker pulling image_笔记_16

jumpserver升级docker pulling image_服务器_17

 

至此,mysql数据库部署完毕,下面部署python3.6

8、部署python3.6
jumpserver软件在启动的时候,一定是运行一个后台程序,而这个后台程序是由python开发的。所以我们要先在服务器上部署好python开发环境,才能去运行python代码。
但是我们linux自带的有python解释器,但是是python2的:

jumpserver升级docker pulling image_学习_18

 由于jumpserver是python3开发的,所以我们现在准备python3的环境: 

jumpserver升级docker pulling image_笔记_19

jumpserver升级docker pulling image_学习_20

jumpserver升级docker pulling image_服务器_21

 编译安装的过程中如果出现报错情况,比如出现基础环境缺少哪些依赖包,那编译安装过程就中止了,此时我们除了把依赖包都安装上外,我们还得把编译的文件和python解压缩包都全部删除了,然后重新解压Python-3.6.10.tgz包,生成新的解压缩包,然后再编译安装。

正确编译安装完毕后,看看你的python是否正确:

jumpserver升级docker pulling image_学习_22

jumpserver升级docker pulling image_学习_23

 

第五步:配置python3的环境变量,就是可以直接使用python3的命令。
环境变量PATH的作用是:当我们敲ls,cd等命令的时候,系统是默认去PATH变量中,冒号分隔的各个路径下,去寻找是否有ls,cd这个命令,也就是我们which ls出来的结果一样,得到的是ls命令的绝对路径,然后执行ls命令的。而我们的linux系统是内置了python2解释器的,就是path变量中是有python命令的。

jumpserver升级docker pulling image_zabbix_24

 此时我又编译安装了python3后,我的系统就有多个python版本。所以此时,我得明确运行jumpserver软件时,我要用哪个解释器运行。但是我的python3是编译安装的,编译安装的路径都是我自己指定的,所以yum、systemctl、PATH等都没有配置我自己编译安装的python3。所以,我的python3编译安装完后,以后要运行jupmserver就要用python3的绝对路径非常麻烦。所以,此时我们要配置python3的环境变量,就是可以直接使用python3的命令。其实,一般编译安装完毕后,下一步都是配置环境变量:

jumpserver升级docker pulling image_服务器_25

 第六步:创建python运行所需的虚拟环境。
为什么要创建虚拟环境?因为python程序(比如这里的Jumpserver程序)能够顺利运行需要安装很多模块。就是实现不同功能的python程序需要调用的不同的模块,所以不同项目的python程序需要的模块不同,我们不可能把所有的python模块都导入。也就是,一台服务器可能要运行多个python程序,每个python程序需要不同的模块,那此时一个解释器就不够用了。此时我们一般的做法是:安装多个版本的python解释器去运行项目。也就是你运行啥python程序,你就创建这个python程序对应的虚拟环境。而创建虚拟环境要用到virtualenv工具。

jumpserver升级docker pulling image_python_26

 所以首先我们要先安装virtualenv工具。而按照virtualenv工具,我们得用pip3去安装。pip3也是一个工具,是给python3安装模块的一个工具。或者说:python3是一个解释器,这个解释器自带了一个pip3工具,这个工具是给python3安装模块的。所以我们现在要用pip3给python3安装virtualenv模块:

jumpserver升级docker pulling image_学习_27

 出现上面的报错就非常麻烦!上面报错的环节是,你安装python模块的时候出现了报错,报错你缺少xxx模块而无法使用。这种情况的解决方式非常麻烦!你要把你上面所有关于python3的步骤全部都撤回。因为我们现在安装的python3软件是我们下载的python3源代码经过gcc编译安装后生成的软件,所以,如果此时我们即使把SSL模块安装上了,python3软件也没有整合这个SSL模块了。所以,要从头再来!一是把环境变量文件改回去;二是删除掉编译安装的python3(这步好做,因为是编译安装的,直接删除文件夹即可);三是安装openssl工具;四是重新编译安装python3才可以。

这里重新再演示一遍: 

jumpserver升级docker pulling image_python_28

jumpserver升级docker pulling image_python_29

jumpserver升级docker pulling image_python_30

jumpserver升级docker pulling image_学习_31

jumpserver升级docker pulling image_笔记_32

jumpserver升级docker pulling image_笔记_33

下面就是再次pip3 install virtualenv,安装virtualenv工具,但是我们先不操作,因为pip3安装的速度非常慢,中间很可能又断开,就又得处理很多东西。pip3就类似linux的yum工具,pip3是python3的管理工具。用pip3下载安装python3的一些包,pip3默认是去python官网的一个软件仓库寻找这些包并安装,所以我们先更新一下pip3的下载源,改成国内的源,速度就快很多。 

jumpserver升级docker pulling image_服务器_34

jumpserver升级docker pulling image_python_35

 

第七步:使用虚拟环境工具,再创建出一个python3的解释器,用于运行jumpserver软件代码。 

jumpserver升级docker pulling image_zabbix_36

这步操作的意思就是:用virtualenv工具创建一个名字叫jumpserver_venv1的虚拟环境。这个虚拟环境用的python解释器是python3。所以此时我basenode上就有2个python3解释器:一个本体的python3解释器,一个虚拟的python3解释器。 

jumpserver升级docker pulling image_学习_37

 第八步:激活虚拟环境
激活虚拟环境和退出虚拟环境的本质,其实就是默认修改了你机器的环境变量。

jumpserver升级docker pulling image_笔记_38

activate其实是一个脚本文件,我们用source命令去读取一下,也就是执行以下,你机器的环境变量就改变了。这个改变了环境变量的环境就是你创建的虚拟环境。这个虚拟环境就好比你又安装了一个python3解释器,而且你可以在这个环境下安装你程序运行需要的相关模块,然后在这个虚拟环境中运行你的程序。当你不想运行程序了,想退出了,你就deactivate,就把你机器的环境变量文件又改回原来的内容了,这样你就回到原来的环境中了。

所以,创建环境变量的这个virtualenv工具特别好,它可以不搞乱你机器原本的环境变量,在原本的环境中创建一个虚拟环境,然后你随便在虚拟环境中做任何事,当你退出虚拟环境后,机器原来的环境还是好好的。

所以,在实际项目中,我们也是不同的项目创建不同的虚拟环境,也就是一个项目对应一个它自己的虚拟环境。这样项目1的运行就不会干扰项目2的运行,就不会出现当项目1、2同时依赖某个包时,而且依赖的包的版本不同,不能同时安装某个包的两个版本,就会2个项目运行冲突了。每个项目都有自己的虚拟环境就不会产生冲突了。而且机器原本的环境也不会被改乱。这个思路可以类比我windows的电脑里面安装了一个vm虚拟化软件,然后通过vm创建的虚拟机。虚拟机和我win的实体机互不影响,互相不影响对方的环境变量。思想是一样的,只是不同的应用。

至此,python3部署完毕,下面开始部署redis数据库。

9、部署redis数据库

mysql是关系型数据库,磁盘数据库,数据以文件的形式存储在磁盘上,可以持久化保存的。所以读写速度慢。
redis是内存型数据库,缓存型数据库。读写速度快。
所以一个网站的web架构,一些需要频繁读取的数据会放到redis数据库中,这样可以加快用户的读取速度,提升web集群的性能。

部署redis数据库,一是,你可以下载rpm包手动安装,但你要手动解决依赖,所以不推荐。二是,你可以yum自动化安装,可以自动解决依赖,适合软件调试学习使用。三是,你可以源代码编译安装redis。

当你只是在测试服务器上部署、或者仅仅是作为一些依赖而需要安装的软件,我们建议一般使用yum安装。而对于一些企业级的部署,需要一些指定的版本和添加指定的额外功能时,我们就得选择源代码编译安装。所以这里我们选择yum安装即可。

yum安装,你首先要配置好阿里云的epel源。

jumpserver升级docker pulling image_python_39

jumpserver升级docker pulling image_笔记_40

redis数据库就部署完毕了!

10、部署jumpserver服务

jumpserver这个软件程序是由一系列的组件共同工作,才能够正确运行。

jumpserver服务是一个后台程序。后台程序基本上都是需要依赖于数据库才能运行,后台程序在启动的时候,代码就会去连接数据库,所以我们要保证数据库正确启动且可以正确连接,否则后台程序是起不来的。

(1)获取jumpserver程序的代码
我们去代码托管平台github上,找到jumpserver并且复制下载链接,用wget下载:
wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz

jumpserver升级docker pulling image_学习_41

下载完毕后,我们就在当前文件夹下面解压缩,生成一个带版本号的解压缩文件夹。

同时,我们再创建一个没有版本号的软链接。

jumpserver升级docker pulling image_笔记_42

(2)安装运行jumpserver软件必须的依赖组件
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
这里很多工具你机器上有忽略了,也并不是说必须有这些工具,jumpserver才能运行。只是这些是基础的包,都是我安装多次踩过的坑,比如openldap-devel就是jumpserver用户认证的工具,比如你安装好后需要哪些工具去观察你系统的资源,这些基础的依赖最好都提前安装上,后期使用就方便了。

jumpserver升级docker pulling image_python_43

 (3)安装运行jumpserver所需要的模块
因为由python开发的程序,必须安装该程序使用的一些模块,才能运行。所以我们现在要安装jumpserver程序中调用到的模块。

jumpserver升级docker pulling image_服务器_44

 但是,安装jumpserver模块必须先激活虚拟环境,然后安装在虚拟环境中。

jumpserver升级docker pulling image_python_45

此时就开始安装python程序和linux系统交互所依赖的一系列模块。

这个安装过程中只要不出现红色的error报错信息,就表示没问题。如果报错,安装进程就自动中断,我们就必须得解决这个报错再重新安装。如果出现warning就关系不大。

jumpserver升级docker pulling image_服务器_46

(4)修改jumpserver程序运行的配置文件  

jumpserver升级docker pulling image_zabbix_47

A:jumpserver的配置文件是config_example.yml,从文件的名字上看,以.yml结尾,这种配置文件和我们之前讲的ansible的剧本脚本是一样的语法,都是yml语法。这种语法就是:关键字+冒号+空格+值 这种形式的语法格式。
jumpserver配置文件默认的配置就是上面的这些,我们要修改的地方是BCD这三个地方,其中BC都是一个密钥,需要我们手动生成的。 

jumpserver升级docker pulling image_学习_48

 if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` ; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi

if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

3、4步骤的命令是一个shell语句,先做一个判断,if如果SECTRE_KEY是空的话,就给SECRET_KEY赋值,赋值用反引号引起来,引号里面的值当作secret_key的值。然后再把值追加写入用户环境变量.bashrc文件中,并且在屏幕上打印出这个值,后面我们要把这个2个值填写到上上图中的B、C处的。

jumpserver升级docker pulling image_学习_49

 

jumpserver升级docker pulling image_python_50

至此,jumpserver的配置文件修改完毕!

(5)对python程序进行数据库迁移

jumpserver这个程序是由python的web框架django开发而来的,所以django程序要运行起来,必须得先配置数据库,而我们前面已经配置数据库了,所以这里我们要进行数据库迁移,生成库表的信息,才能运行程序。 

jumpserver升级docker pulling image_笔记_51

jumpserver升级docker pulling image_服务器_52

jumpserver升级docker pulling image_笔记_53

至此jumpserver部署完毕。下面是启动jumpserver核心后台:
11、启动jumpserver后台程序 

jumpserver升级docker pulling image_笔记_54

jumpserver升级docker pulling image_学习_55

jumpserver升级docker pulling image_学习_56

 出现上面的信息就表示jumpserver后台程序已经跑起来了,现在用chrom测试访问一下8080端口:

jumpserver升级docker pulling image_笔记_57

至此,我们的jumpserver后台是正确启动了,也从8080端口验证了它是启动了。 

jumpserver升级docker pulling image_学习_58

至此,我们部署了最核心的CORE组件。但是要使jumpserver正确工作,还得部署其他的组件。下面我们部署COCO组件。

(四)koko程序部署

CoCo是用python写的一个组件,Koko是最新的版本,但是是用go语言开发的,其性能、效率、系统资源利用率都更高了。
这个组件的功能是:用户不仅可以在本地命令行终端ssh连接一台服务器,然后去敲各种命令,也可以通过网页的形式去连接一台服务器,在线的敲各种命令。就是一个在线的终端。

1、下载koko源代码
这是官方给的一个下载地址:
https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz

jumpserver升级docker pulling image_zabbix_59

 2、解压缩、修改配置文件

jumpserver升级docker pulling image_python_60

jumpserver升级docker pulling image_python_61

jumpserver升级docker pulling image_笔记_62

3、启动koko程序 

jumpserver升级docker pulling image_zabbix_63

2222端口运行的就是koko程序

至此,koko组件部署完毕。

(五)部署Guacamole组件

jumpserver堡垒机的正确运行,是由它的5个组件一起提供的。现在讲guacamole组件:

jumpserver升级docker pulling image_zabbix_64

 意思就是,通过guacamole这个组件,我们就可以通过浏览器的形式,远程连接一个服务器,当作我们的远程桌面使用。部署Guacamole组件的流程也是下载、安装、启动,但是中间还是涉及到很多步骤,而且我们没有找到安装包,所以这里就不安装guacamole组件了。而且guacamole组件是一个windows组件,安装后只能通过jumpserver的web客户端来连接windows服务器,不实用,所以我们不安装了。 

(六)部署Lina、Luna组件

lina组件是让前端页面更好看的展示。前端是静态文件,前端文件是由nginx来解析的。
luna组件是实现web terminal前端,前端只提供样式,数据从后台core获取。所以luna和core协同工作,实现浏览器形式的命令行终端。

1、获取lina代码。下载地址: wget https://github.com/jumpserver/lina/releases/download/v2.1.0/lina-v2.1.0.tar.gz

jumpserver升级docker pulling image_zabbix_65

2、解压缩lina组件、重命名、修改属主和属组 

jumpserver升级docker pulling image_学习_66

3、获取luna代码:wget https://github.com/jumpserver/luna/releases/download/v2.1.1/luna-v2.1.1.tar.gz 

jumpserver升级docker pulling image_python_67

4、解压缩luna、改名 

jumpserver升级docker pulling image_服务器_68

5、部署nginx
nginx的作用是处理静态文件,以及对于jumpserver后台程序的反向代理作用。 

jumpserver升级docker pulling image_python_69

jumpserver升级docker pulling image_服务器_70

 

上图画框的内容是要删除的,删除后用下面的内容代替: 

jumpserver升级docker pulling image_python_71

jumpserver升级docker pulling image_笔记_72

jumpserver升级docker pulling image_学习_73

  

37 
  38 server {
  39         listen 80;
  40 
  41         client_max_body_size 100m;
  42 
  43         location /ui/ {
  44                 try_files $uri / /index.html;
  45                 alias /opt/jumpserver_xiangguan/lina/;
  46         }
  47 
  48         location /luna/ {
  49                 try_files $uri / /index.html;
  50                 alias /opt/jumpserver_xiangguan/luna/;
  51         }
  52 
  53         location /media/ {
  54                 add_header Content-Encoding gzip;
  55                 root /opt/jumpserver_xiangguan/jumpserver/data/;
  56         }
  57 
  58         location /static/ {
  59                 root /opt/jumpserver_xiangguan/jumpserver/data;
  60         }
  61 
  62         location /koko/ {
  63                 proxy_pass      http://localhost:5000;
  64                 proxy_buffering off;
  65                 proxy_http_version 1.1;
  66                 proxy_set_header Upgrade $http_upgrade;
  67                 proxy_set_header Connection "upgrade";
  68                 proxy_set_header X-Real-IP $remote_addr;
  69                 proxy_set_header Host $host;
  70                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  71                 access_log off;
  72         }
  73 
  74         location /ws/ {
  75                 proxy_set_header X-Real-IP $remote_addr;
  76                 proxy_set_header Host $host;
  77                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  78                 proxy_pass http://localhost:8070;
  79                 proxy_http_version 1.1;
  80                 proxy_buffering off;
  81                 proxy_set_header Upgrade $http_upgrade;
  82                 proxy_set_header Connection "upgrade";
  83         }
  84 
  85         location /api/ {
  86                 proxy_pass http://localhost:8080;
  87                 proxy_set_header X-Real-IP $remote_addr;
  88                 proxy_set_header Host $host;
  89                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  90         }
  91 
  92         location /core/ {
  93                 proxy_pass http://localhost:8080;
  94                 proxy_set_header X-Real-IP $remote_addr;
  95                 proxy_set_header Host $host;
  96                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  97         }
  98 
  99         location / {
 100                 rewrite ^/(.*)$ /ui/$1 last;
 101         }
 102 }
 103

jumpserver升级docker pulling image_笔记_74

 此时登录前端页面就能查看到下面的页面:

jumpserver升级docker pulling image_服务器_75

也就是当我们访问80端口的时候,nginx就把请求转发给后台的8080端口,就是jumpserver服务了。
账号和密码默认都是admin: 

jumpserver升级docker pulling image_zabbix_76

登陆上就看到: 

jumpserver升级docker pulling image_zabbix_77

这个页面就是堡垒机的页面了,能正确显示这个页面,也说明我们的jumpserver后台程序正确跑起来了。也就是到此我们的堡垒机部署完毕。至于后面怎么使用这个页面上的各种功能,你可以去看jumpserver的官方文档介绍。

(七)补充:解决koko无法启动问题

新版jumpserver在启动koko组件的时候,经常会出现如下问题:

jumpserver升级docker pulling image_学习_78

解决步骤如下:

1、删除koko的data目录下的.access_key文件

jumpserver升级docker pulling image_笔记_79

 2、把前端页面中的‘会话管理’-‘终端管理’中的数据清除掉,点击删除就清除了。

jumpserver升级docker pulling image_zabbix_80

3、重新生成获取SECRET_KEY和BOOTSTRAP_TOKEN这两个重要的密钥,然后修改jumpserver后台所有组件的配置,重启服务。
我们当时生成这2个key的时候,是用的2条shell语句自己生成的密钥: 

jumpserver升级docker pulling image_学习_81

 这2条shell脚本是要先判断这两个key是否为空,为空了才生成新key,所以这里我们先把原来的key删了,再生成新的key。所以我们要先修改环境变量配置文件:vim ~/.bashrc

把.bashrc文件里面最后2行的key值dd删掉,然后保存退出,然后退出会话重新登录,这样系统重新加载用户的环境变量,此时echo $SECTRE_KEY 就返回为空,同理BOOTSTRAP_TOKEN。就是正确删除了旧的密钥。

然后我们再用上图的shell语句重新生成2个新的密钥。同时环境变量配置文件也自动修改了,所以要退出会话重启一下。

然后修改jumperver组件的config.yml文件中那2个key值,并重新启动jumpserver的core核心后台(这里要先/opt/jumpserver_xiangguan/jumpserver/jms stop ,然后再/otp/jumpserver_xiangguan/jumpserver/jms start -d启动)。

然后修改koko的配置文件(/opt/jumpserver_xiangguan/koko/config.yml)并后台重新启动koko(/opt/jumpserver_xiangguan/koko/koko -d)。

如果你还安装了guacamole组件,你也得把这个组件涉及到这2个密钥的文件也改改。

  • 小结:jumpserver后台程序的启动流程
    (1)启动数据库mysql、redis
         systemctl start mysqld
         systemctl start redis
    (2)激活python的虚拟环境,然后启动jumpserver的核心后台
         source /opt/python_xiangguan/jumpserver_venv1/bin/activate      /opt/jumpserver_xiangguan/jumpserver/jms start -d
    (3)启动koko程序
         /opt/jumpserver_xiangguan/koko/koko -d (4)启动nginx,也就是启动web服务器
    (5)从前端浏览器查看页面是否正常展示,正常展示就说明后台程序正确运行着。
(八)给目标机器添加防火墙规则¶