目录
1.jumpserver部署模式
目前Jumpserver支持以下部署方案:
- 单机部署
- 高可用部署
- 集群部署
- 分布式部署
但是具体哪种场景采用哪种部署方案,最佳的部署方案是什么很多用户并不清楚,本文主要就企业不同的场景为出发点,详细描述不同场景下的最佳JumpServer部署方案。
1.1.单机部署
JumpServer单机部署并不是单单指采用单台机器部署,而是包含了三大组件都为单节点部署(即组件单节点)。所以JumpServer的单机部署分为All In One方式和独立部署方式,如下图:
是否采用单机部署主要取决于两方面因素:
- 访问资产并发数量,也就是同时在线会话数
- 整体管理的资产数量
单机部署推荐场景表:
1.2.高可用部署
同单机部署一样,高可用部署也分为整体高可用(All in one高可用)和独立节点高可用,如下图:
高可用部署场景和单机部署场景的本质区别在于数据的完整性和服务连续性要求不一样。高可用部署可以在单机部署场景上满足以下两个企业需求:
- 数据库数据和录像数据可以实时备份;
- 服务可以连续提供,当其中主节点有问题时可以立即切换备节点继续提供服务。
高可用部署推荐场景表:
1.3.集群部署场景
JumpServer集群部署主要用于资产访问大并发场景,目的在于提高会话处理能力。
集群部署同样支持业务的高可用,具备以下特点:
- 资产较多,会话并发大的情况(字符会话并发超过200以上,图形会话超过100以上)。
- 资产规模增加快,并发会并发话量增加快,需要JumpServer的处理能力能够随着资产规模的增加而能够快速扩容;
- 任何节点宕机不影响平台的正常使用,保证可用节点数1+以上就能保证业务正常访问。
集群的规模可以随着访问并数的增加而动态扩容增加,和资产数量无直接关系。所以是否采用集群部署主要取决于访问会话并发数。
集群部署推荐场景表:
1.4.分布式部署
JumpServer分布式部署场景不同于其他场景部署。分布式部署主要用于资产多地域或者网多络区域分布,并且对访问运维入口也有相应的要求。
JumpServer分布式部署具备以下特点:
- 用户的资产分布在不同的区域(网络)位置,需要通过堡垒机统一管理的同时,并且不同区域的人员可以就近访问堡垒机;
- 不同区域的资产、用户、权限、审计等,可以由管理员统一设置与管理,也可以由管理员设置多租户模式,进行管理权限分管。
当然如果不同的地域资产并发也交较多或者也要求业务连续性等。分布式部署可以扩展为集群分布式部署或者高可用分布式部署。如下:
JumpServer网域分布式不同于上述方案,网域主要为统一运维入口。如果区域访问并发不高,所有人员集中访问,可以采用网域方案。
分布式部署推荐场景表:
2.数据备份恢复说明
2.1.数据库备份
2.1.1.手动备份
jmsctl backup_db
可直接执行jmsctl命令备份数据库,备份完成会显示备份文件位置
2.1.2.定时备份
在jumpserver服务器创建此脚本
cat /opt/check_scripts/backup_db.sh
#!/bin/bash
CURRENT_DATE=`date +"%Y-%m-%d-%H:%M:%S"`
# 备份文件名
BACKUP_FILE="${BACKUP_DIR}/jumpserver_db_backup_${CURRENT_DATE}.sql"
CONFIG_NAME="config_${CURRENT_DATE}.txt"
CONFIG_DIR="/opt/jumpserver/config/config.txt"
# 备份目录
BACKUP_DIR="/data/jms_backup"
# 备份保留天数
RETENTION_DAYS=7
# 判断备份目录是否存在
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
DB_DATABASE=$(cat ${CONFIG_DIR} | grep -v "#" | grep -w "DB_NAME" | awk -F= '{print $2}')
DB_USER=$(cat ${CONFIG_DIR} | grep -v "#" | grep -w "DB_USER" | awk -F= '{print $2}')
DB_PASSWORD=$(cat ${CONFIG_DIR} | grep -v "#" | grep -w "DB_PASSWORD" | awk -F= '{print $2}')
DB_PORT=$(cat ${CONFIG_DIR} | grep -v "#" | grep -w "DB_PORT" | awk -F= '{print $2}')
DB_HOST=$(cat ${CONFIG_DIR} | grep -v "#" | grep -w "DB_HOST" | awk -F= '{print $2}')
cp ${CONFIG_DIR} ${BACKUP_DIR}/${CONFIG_NAME}
docker exec jms_core mysqldump -u${DB_USER} -p${DB_PASSWORD} -h ${DB_HOST} ${DB_DATABASE} | > ${BACKUP_DIR}/${BACKUP_FILE}
if [ $? -eq 0 ];then
echo -e "\e[32m[SUCCESS] Backup succeeded! The backup file has been saved to: ${BACKUP_DIR}${BACKUP_FILE} \e[0m" >> ${BACKUP_DIR}/bak.log
else
echo -e "\e[31m[FAILED]: ${CURRENT_DATETIME} \e[0m" >> ${BACKUP_DIR}/bak.log
exit1
fi
# # 清理备份数据
find ${BACKUP_DIR} -type f -name *jumpServer*.sql -mtime +${RETENTION_DAYS} -exec rm -rf {} \;
添加crontab 计划任务定时备份
chmod +x /opt/check_scripts/backup_db.sh
# 每天凌晨3点执行备份
0 3 * * * /bin/bash /opt/check_scripts/backup_db.sh
2.2.数据库恢复
1、查看数据库连接信息
cat /opt/jumpserver/config/config.txt | grep DB
2、将备份的sql文件copy到容器内恢复数据
[root@jumpserver-v3 ~]# docker cp xxx.sql jms_core:/tmp/ #将sql文件传输到core容器内
[root@jumpserver-v3 ~]# docker exec -it jms_core /bin/bash
root@jms_core:/# mysql -uroot -p
Enter password:
MariaDB [(none)]> show create database jumpserver; #查看数据库字符集配置
MariaDB [(none)]> drop database jumpserver; #删除原本的数据库,谨慎操作!
MariaDB [(none)]> CREATE DATABASE `jumpserver` /*!40100 DEFAULT CHARACTER SET utf8mb3 */; #创建新库
MariaDB [(none)]> use jumpserver;
MariaDB [(none)]> source /tmp/xx,sql;
3、启动服务
进入到原版本的安装包目录中,使用启动命令重新启动即可。
[root@jumpserver-v3 ~]# cd /opt/jumpserver-offline-release-v3.5.0-amd64/
#拉取版本镜像
[root@jumpserver-v3 jumpserver-offline-release-v3.5.0-amd64]# ./jmsctl.sh start
3.迁移
3.1.数据库备份
在config.txt 中获取数据库信息
DB_HOST: mysql # 数据库服务器 IP
DB_PORT: 3306 # 数据库服务器 端口
DB_USER: jumpserver # 连接数据库的用户
DB_PASSWORD: ****** # 连接数据库用户的密码
DB_NAME: jumpserver # JumpServer 使用的数据库
进入到原版本的安装包目录中,执行备份命令。
[root@jumpserver-v3 jumpserver-offline-release-v3.5.0-amd64]# ./jmsctl.sh backup_db
3.2.修改数据库字符集
确认数据库字符集保证迁移前后数据库字符集一致
MariaDB [(none)]> show create database jumpserver; #查看数据库字符集配置
MariaDB [(none)]> show create database jumpserver;
+------------+------------------------------------------------------------------------+
| Database | Create Database |
+------------+------------------------------------------------------------------------+
| jumpserver | CREATE DATABASE `jumpserver` /*!40100 DEFAULT CHARACTER SET utf8mb3 */ |
+------------+------------------------------------------------------------------------+
1 row in set (0.000 sec)
3.3.下载jumpserver安装包
[root@jumpserver ~]# cd /opt/
[root@jumpserver opt]# wget https://support.fit2cloud.com/download/0293da74-3970-4d3e-906e-b9ce420361b2/jumpserver-offline-release-v3.10.10-amd64.tar.gz
[root@jumpserver opt]# tar xf jumpserver-offline-release-v3.10.10-amd64.tar.gz
[root@jumpserver opt]# cd jumpserver-offline-release-v3.10.10-amd64/
3.4.编辑临时配置文件
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# vim config-example.txt
# 修改下面选项, 其他保持默认
### 数据持久化目录, 安装完成后请勿随意更改, 可以使用其他目录如: /data/jumpserver
VOLUME_DIR=/data/jumpserver
### 注意: SECRET_KEY 与旧版本不一致, 加密的数据将无法解密
# Core 配置
### 启动后不能再修改,否则密码等等信息无法解密
SECRET_KEY= # 从旧版本的配置文件获取后填入 (*)
BOOTSTRAP_TOKEN= # 从旧版本的配置文件获取后填入 (*)
3.5.部署jumpserver
3.5.1.使用内置数据库
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh install
一路回车默认选项安装即可
[root@jumpserver ~]# docker exec -it jms_mysql bash
root@jms_mysql:/# mysql -uroot -p$MARIADB_ROOT_PASSWORD
MariaDB [(none)]> drop database jumpserver;
MariaDB [(none)]> CREATE DATABASE `jumpserver` /*!40100 DEFAULT CHARACTER SET utf8mb3 */;
将旧版本数据库数据导入到数据库中
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh restore_db /opt/jumpserver.sql #jumpserver.sql为旧版本数据库备份sql文件
数据导入完成后启动服务
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh start
3.5.2.使用外置数据库
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh install
……
4. 配置 MySQL
是否使用外部 MySQL? (y/n) (默认为 n): y
请输入 MySQL 的主机地址 (无默认值): 192.168.100.1 #外置数据库IP
请输入 MySQL 的端口 (默认为 3306): 3306
请输入 MySQL 的数据库 (默认为 jumpserver): jumpserver # 数据库名称
请输入 MySQL 的用户名 (无默认值): jumpserver # 用户名
请输入 MySQL 的密码 (无默认值): Password # 密码
完成
5. 配置 Redis
是否使用外部 Redis? (y/n) (默认为 n): y
请输入 Redis 的主机地址 (无默认值): 192.168.100.11
请输入 Redis 的端口 (默认为 6379): 6379
请输入 Redis 的密码 (无默认值): weakPassword
……
将旧版本数据库数据导入到数据库中
[root@jumpserver ~]# docker exec -it jms_core bash
root@jms_core:/opt/jumpserver# mysql -uroot -p -h 192.168.100.11 jumpserver < jumpserver.sql #旧版本备份的sql文件
数据导入完成后启动服务
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh start
3.5.3 使用旧的外置数据库
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh install
一路回车默认安装,安装完成后修改数据库连接地址和redis连接地址
[root@jumpserver ~]# vim /opt/jumpserver/config/config.txt
################################# MySQL 配置 ##################################
# 外置 MySQL 需要输入正确的 MySQL 信息, 内置 MySQL 系统会自动处理
#
DB_HOST=192.168.21.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=ZGE4MTNiNDItMzRhMi1mMjd
DB_NAME=jumpserver
################################# Redis 配置 ##################################
# 外置 Redis 需要请输入正确的 Redis 信息, 内置 Redis 系统会自动处理
#
REDIS_HOST=192.168.21.2
REDIS_PORT=6379
REDIS_PASSWORD=ZGE4MTNiNDItMzRhMi1mMjdhLW
修改完成后启动服务
[root@jumpserver jumpserver-offline-release-v3.10.10-amd64]# ./jmsctl.sh start
4.日志排查方法
jumpserver每个组件负责不同的模块,需要根据使用功能到对应组件下去排查相关日志。可配合开启debug日志,显示更多详细信息。
4.1.core组件
core 组件是jumpserver的核心组件,其他组件依赖此组件启动,登录认证相关的日志一般到这个core组件日志下排查.
Celery 是处理异步任务的组件,用于执行 JumpServer 相关的自动化任务。celery组件和core组件使用的是同一个容器,所以celery组件的日志也可以到core下查看。
查看容器运行日志
[root@jumpserver ~]# docker logs -f jms_core –tail 200
持久化目录
[root@jumpserver ~]# ls -al /data/jumpserver/core/data/logs/
进入容器内查看
[root@jumpserver ~]# docker exec -it jms_core bash
root@jms_core:/opt/jumpserver# cd data/logs/
root@jms_core:/opt/jumpserver/data/logs# ls
2024-06-24 celery_ansible.log #celery日志 drf_exception.log jumpserver.log #core日志主要看这个 jumpserver.log.3 ansible.log celery_default.log # celery日志 beat.log celery.log #celery日志 gunicorn.log
4.2.Koko组件
koko组件是服务于类 Unix 资产平台的组件,通过 SSH、Telnet 协议提供字符型连接
[root@jumpserver ~]# docker logs -f jms_koko –tail 200
持久化目录
[root@jumpserver ~]# ls -al /data/jumpserver/koko/data/logs/
进入容器内查看
[root@jumpserver ~]# docker exec -it jms_koko bash
root@jms_koko:/opt/koko# cd data/logs/
root@jms_koko:/opt/koko/data/logs# ls
koko.log
4.3.Lion组件
Lion 是服务于 Windows 系统平台的组件,用于 Web 端访问 Windows 资产
[root@jumpserver ~]# docker logs -f jms_lion–tail 200
持久化目录
[root@jumpserver ~]# ls -al /data/jumpserver/lion/data/logs/
进入容器内查看
[root@jumpserver ~]# docker exec -it jms_lion bash
root@jms_lion:/opt/lion# cd data/logs/
root@jms_lion:/opt/lion/data/logs# ls
guacd.log lion.log #lion日志
4.4.Web组件
Web 组件用于提供 JumpServer 的前端页面
[root@jumpserver ~]# docker logs -f jms_web–tail 200
持久化目录
[root@jumpserver ~]# ls -al /data/jumpserver/nginx/data/logs/
进入容器内查看
[root@jumpserver ~]# docker exec -it jms_web bash
root@jms_web:/opt# cd /var/log/nginx/
root@jms_web:/var/log/nginx# ls
access.log tcp-access.log error.log
4.5.Razor组件
Razor是服务于 RDP 协议组件,JumpServer Client 默认使用 Razor 组件访问 Windows 资产。
[root@jumpserver ~]# docker logs -f jms_razor–tail 200
持久化目录
[root@jumpserver ~]# ls -al /data/jumpserver/razor/data/logs/
进入容器内查看
[root@jumpserver ~]# docker exec -it jms_razor bash
root@jms_razor:/opt/razor# cd data/logs/
root@jms_razor:/opt/razor/data/logs# ls
razor.log
4.6.Chen组件
Chen 是服务于数据库的组件,用于通过 Web GUI 方式访问数据库资产。
[root@jumpserver ~]# docker logs -f jms_chen–tail 200
持久化目录
[root@jumpserver ~]# ls -al /data/jumpserver/chen/data/logs/
进入容器内查看
[root@jumpserver ~]# docker exec -it jms_chen bash
root@jms_chen:/opt/chen# cd data/logs/
root@jms_chen:/opt/chen/data/logs# ls
chen.log wisp.log
各组件说明:
- Core 组件是 JumpServer 的核心组件,其他组件依赖此组件启动。
- Koko 是服务于类 Unix 资产平台的组件,通过 SSH、Telnet 协议提供字符型连接。
- Lion 是服务于 Windows 资产平台的组件,用于 Web 端访问 Windows 资产。
- XRDP 是服务于 RDP 协议组件,该组件主要功能是通过 JumpServer Client 方式访问 windows 2000、XP 等系统的资产。
- Razor 是服务于 RDP 协议组件,JumpServer Client 默认使用 Razor 组件访问 Windows 资产。
- Magnus 是服务于数据库的组件,用于通过客户端代理访问数据库资产。
- Kael 是服务于 GPT 资产平台的组件,用于纳管 ChatGPT 资产。
- Chen 是服务于数据库的组件,用于通过 Web GUI 方式访问数据库资产。
- Celery 是处理异步任务的组件,用于执行 JumpServer 相关的自动化任务。
- Video 是专门处理 Razor 组件和 Lion 组件产生录像的格式转换工作,将产生的会话录像转化为 MP4 格式。
- Panda 是基于国产操作系统的应用发布机,用于调度 Virtualapp 应用。
5.安全策略设置
5.1.堡垒机开放端口说明
堡垒机管理员可以根据实际环境中jumpserver组件部署方案和堡垒机使用方案,在网络和主机侧开放下列相关端口。
5.2.允许访问的账号类型
5.2.1.本地账号
在 JumpServer 内部创建和管理的用户账号,通过jumpserver管理后台进行添加,删除和权限分配
5.2.2.LDAP/AD 账号
通过 LDAP 或 Active Directory 集成的外部用户账号,在JumpServer 中配置 LDAP/AD 集成后,用户可以使用 LDAP/AD 账户进行认证和登录。
5.2.3.SSO(单点登录)账号
通过单点登录集成的外部用户账号,在 JumpServer 中配置 SSO(如 OAuth、SAML)集成后,用户可以通过 SSO 登录 JumpServer。
6.堡垒机连接方式
6.1.Web访问
通过浏览器访问Jumpserver的Web页面
6.2.命令行访问
6.2.1.ssh命令行连接堡垒机
命令格式:
ssh jumpserverUsername@jumpserverHostIP -p2222
- jumpserverUsername:登录jumpserver的用户。
- jumpserverHostIP:JumpServer的访问地址,IP与域名均可。
- 2222:Jumpserver命令行连接端口,默认为2222端口。
连接成功如下图所示:
连接成功后可根据命令提示连接资产操作
注:目前该种方式暂不支持RDP协议的资产连接登录。
6.2.2.ssh命令行直连JumpServer纳管的资产
命令格式:
ssh jumpserverUsername@systemUsername@AssetIP@jumpserverHostIP -p2222
- jumpserverUsername:登录jumpserver的用户。
- systemUsername:连接资产使用的账号名称。
- AssetIP:被连接的资产IP。
- jumpserverHostIP:JumpServer的访问地址,IP与域名均可。
- 2222:Jumpserver命令行连接端口,默认为2222端口。
连接成功如下图所示: