📖 介绍

Jumpserver 是一款使用Python, Django 开发的开源跳板机系统, 为互联网企业提供了认证,授权,审计,自动化运维等功能。我们称为跳板机(在web界面操作),类似于VPN,但是jumpserver是七层代理 VPN是四层代理,对于开发和测试我们会让他们使用jumpserver(访问nginx,mysql等服务,一般都是在浏览器上操作) jumpserver分为开源和商业两个版本,提供了认识,授权。商业堡垒机安全机制会相对高一些(可以手机收验证码,或者U顿插入才可以登录)

主要功能 :需要通过这台机器跳到不同的机器
1 记录所有操作会进行录像,以及可以看到谁在登录 
2 对于危险的命令可以禁止执行 如:rm 、reboot 等等
3 支持登录认证,LDAP认证,多因子认证。
4 可以针对不同的用户给予不同的权限,可以进行资产分配,指定用户访问指定的服务器
5 账号管理:集中账号管理,统一密码管理、`
官方地址:http://www.jumpserver.org/

Docker 就不介绍安装了,直接步入正题

🧰docker手动部署

使用Docker安装数据库

root@jumpserver:~# docker pull mysql:5.6.44
root@jumpserver:~# docker pull redis:4.0.14
#进入容器查看配置文件,然后把容器配置文件拷贝宿主机
root@jumpserver:~# docker run -it --rm mysql:5.6.44 bash
root@01af5631d811:/# ls /etc/mysql/mysql.conf.d/mysqld.cnf
这个时候我们在打开一个新的窗口,要复制这个容器的ID才能把文件拷出来
root@jumpserver:~# mkdir /etc/mysql/mysql.conf.d/ -p
root@jumpserver:~# docker cp 01af5631d811:/etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/
然后在MySQL配置文件最后一行添加字符集
vim /etc/mysql/mysql.conf.d/mysqld.cnf
character-set-server=utf8
- 然后把MySQL这个配置文件也拷贝到宿主机
root@jumpserver:~# mkdir  /etc/mysql/conf.d/
root@jumpserver:~# docker cp 01af5631d811:/etc/mysql/conf.d/mysql.cnf /etc/mysql/conf.d/

接着在宿主机也添加字符集
root@jumpserver:~# vim /etc/mysql/conf.d/mysql.cnf
[mysql]
default-character-set=utf8

- 创建数据目录
root@jumpserver:~# mkdir /data/mysql -p

- 启动MySQL容器,刚才的一台可以退出了 
docker run -it -d -p 3306:3306 -v /etc/mysql/mysql.conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="yhtzjy.com" mysql:5.6.44
- 查看MySQL是否启动成功
[root@localhost ~]# docker logs -f bfe43ecb5cf2
日志出现这个准备好连接代表mysql已经启动成功(mysqld: ready for connections)
也可以找一台客户端测试连接 apt install mysql-client -y
或者我们进入容器连接测试
root@jumpserver:~# docker exec -it 326b5492d362 bash
root@326b5492d362:/# mysql -uroot -pyhtzjy.com
mysql> show databases;
在查看一下字符集是不是 UTF8
mysql> show variables like "%character%";show variables like "%collation%";
没问题就创建jumpserver数据库,和授权用户
mysql> create database jumpserver default charset 'utf8';
mysql> grant all on jumpserver.* to 'jumpserver'@'%' identified by 'yhtzjy.com';
#这个时候我们使用客户端就可以远程连接 mysql -ujumpserver -h8.142.110.116 -pyhtzjy.com
mysql> show databases;
+--------------------+
' Database           '
+--------------------+
' information_schema '
' jumpserver         '
+--------------------+
2 rows in set (0.00 sec)

部署redis

由于自带的radis没有 radis.conf文件 我们需要自己在宿主机创建目录,然后映射到容器里面

root@jumpserver:~# mkdir /data/radis
root@jumpserver:~# docker run -it -p 6379:6379 -d -v /data/radis/:/data redis:4.0.14
查看redis日志是否启动,或者客户端下载一个连接测试
root@jumpserver:~# docker logs -f 5545c28b857d

官网搜索jumpserver的镜像

进入hub官方搜索jumpserver,然后找到这个(jumpserver/jms_all)包含所有组件的镜像
https://hub.docker.com/
然后点击Tags  找到1.5.9版本   个人用老版本的感觉好用,现在都是2.x版本
root@jumpserver:~# docker pull jumpserver/jms_all:1.5.9

生成随机秘钥和初始化token给jumpserver使用

#生成秘钥
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
#然后复制秘钥记下来(key),然后生成token记录下来
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

启动容器

  • 指定key和tocken,指定数据库地址端口,以及指定镜像

  • 80和2222都是SSH端口,80用的是Nginx服务

  • /opt/jumpserver 是我们的数据目录包含录像等等

  • 没有-d 是因为我们要查看一下启动日志mysql是否可以启动成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17


    docker run --name jms_all \
    -v /opt/jumpserver:/opt/jumpserver/data/media \
    -p 80:80 \
    -p 2222:2222 \
    -e SECRET_KEY=1GYc3TjwRDfV2UPXQjYvkJpG4E2K6Zl8SBZpChjBh6IjRn3r5v \
    -e BOOTSTRAP_TOKEN=hROQTd7WOn68DzEL \
    -e DB_HOST=10.0.0.72 \
    -e DB_PORT=3306 \
    -e DB_USER='jumpserver' \
    -e DB_PASSWORD="magedu.com" \
    -e DB_NAME=jumpserver \
    -e REDIS_HOST=10.0.0.72 \
    -e REDIS_PORT=6379 \
    -e REDIS_PASSWORD= \
    jumpserver/jms_all:1.5.9

    登录jumpserver

  • 启动成功之后就可以进入MySQL查看,只要有表就没问题,然后就直接输入IP地址登录,默认账号名和密码都是小写的 admin

    1
    2
    3
    [root@localhost ~]# mysql -ujumpserver -pyhtzjy.com -h8.142.110.116
    MySQL [(none)]> use jumpserver;
    MySQL [jumpserver]> show tables;

    jumpserver登录界面介绍

  • jumpserver的用户配置

    首先就是创建组和用户,用户只是登录web界面的,我们先创建组然后把用户分配到组里面 ,比如开发我们创建一个develope 组,数据库我们创建一个DBA组,然后我们可以根据组授权不同的资产 (让这个组只能看到指定服务器,加入DBA 就只能看到MySQL) 。后期我们就可以只把用户加到组里面,他们登录jumpserver就只能看到指定的服务器

  • jumpserver的资产管理

    如果机器少可以一个一个手动创建,如果服务器多的话可以直接导入Execl表格,批量进行导入服务器,然后编辑资产的话还需要给 IP分配系统用户,让指定用户连接

  • jumpserver系统用户和管理用户

管理用户:就是linux中的root 密码必须和需要连接的服务器密码一样,如果多台都不同还可以编辑管理用户,添加资产的秘钥,这样也可以连接
系统用户: 指你需要登录的目标资产主机的普通用户, 这个用户是给你登录目标主机的用户, 批量执行命令的用户

🧰docker一键部署

新版jumpserver官方已经给了一键部署开源v3.3.1一键部署脚本,直接执行即可完成一键部署,参考官方文档

如果机器可以访问外网参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash

cd /opt/jumpserver-installer-v3.3.1

# 启动
./jmsctl.sh start

# 停止
./jmsctl.sh down

# 卸载
./jmsctl.sh uninstall

# 帮助
./jmsctl.sh -h

地址: http://<JumpServer服务器IP地址>:<服务运行端口>
用户名: admin
密码: admin

✈️接入LDAP

由于目前公司使用jumpserver员工人数越来越多,每次都需要手动创建账号密码非常麻烦,jumpserver很不错的一点是支持LDAP认证参考官方文档

我这边接入LDAP以后是选择的手动认证LDAP,因为LDAP用户过多每次自动同步用户量会非常大。后期可以考虑优化在LDAP专门创建一个jumpserver的ou组,然后我们在配置上面指定ou和用户过滤器优化,好处是实时同步LDAP用户,而且每次需要添加用户我们只需要在AD(一般是windows-server搭建的AD)上面吧用户增加到jumpserver的组里面即可使用

增加SSL证书🔐

参考官方文档:

说明:这里使用最简单的方式更换证书,无需更改Nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1、关闭jumper服务
cd /opt/jumpserver-installer-v3.2.0
./jmsctl.sh stop

2、 编辑 JumpServer 主配置文件
vim /opt/jumpserver/config/config.txt
## Nginx 配置
HTTP_PORT=80
SSH_PORT=2222
RDP_PORT=3389

## HTTPS 配置
HTTPS_PORT=443 # 对外 https 端口, 默认 443
ERVER_NAME=jumper.dxbim.com # 你的 https 域名
SSL_CERTIFICATE=/opt/jumpserver/config/nginx/cert/server.crt # 目录下你的证书文件,注意:server.crt名字和路径不能变,否则需要修改nginx配置
SSL_CERTIFICATE_KEY=/opt/jumpserver/config/nginx/cert/server.key # 目录下你的 key 文件,注意:server.key名字和路径不能变,否则需要修改nginx配置

3、上传dxbim.com证书到/opt/jumpserver/config/nginx/cert/路径,然后覆盖原有证书
[root@test-master-99 cert]# pwd
/opt/jumpserver/config/nginx/cert
[root@test-master-99 cert]# cp -r dxbim.com/fullchain.cer server.crt
[root@test-master-99 cert]# cp -r dxbim.com/cert.key server.key

4、重启服务访问域名验证 (如果没加解析可以先windows本地修改hosts解析验证)
cd /opt/jumpserver-installer-v3.2.0
./jmsctl.sh start

浏览器访问验证,如果自动跳转https即可,证书有效以后再登录一台资产测试正常即可,另外最好在web设置里面原先的http域名修改为当前的https即可

更换证书流程: 直接把新证书替换/opt/jumpserver/config/nginx/cert/里面的crt和最新的key,然后在重启服务即可