Jumpserver使用docker部署
📖 介绍
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 | curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash |
✈️接入LDAP
由于目前公司使用jumpserver员工人数越来越多,每次都需要手动创建账号密码非常麻烦,
jumpserver很不错的一点是支持LDAP认证
,参考官方文档我这边接入LDAP以后是选择的手动认证LDAP,因为LDAP用户过多每次自动同步用户量会非常大。
后期可以考虑优化在LDAP专门创建一个jumpserver的ou组,然后我们在配置上面指定ou和用户过滤器优化,好处是实时同步LDAP用户,而且每次需要添加用户我们只需要在AD(一般是windows-server搭建的AD)上面吧用户增加到jumpserver的组里面即可使用
增加SSL证书🔐
说明:这里使用最简单的方式更换证书,无需更改Nginx配置
1 | 1、关闭jumper服务 |
浏览器访问验证,如果自动跳转https即可,证书有效以后再登录一台资产测试正常即可,另外最好在web设置里面原先的http域名修改为当前的https即可
更换证书流程: 直接把新证书替换/opt/jumpserver/config/nginx/cert/里面的crt和最新的key,然后在重启服务即可