Jumpserver堡垒机
快速搭建Jumpserver堡垒机
一款广受欢迎的开源堡垒机:JumpServer
它主要是帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。
github已经收获30K+star,还是非常多人使用的,也有商业版,小企业用开源版足够了。
下面详细讲解如何部署和使用JumpServer。
1 部署JumpServer
官网文档:JumpServer 文档
有多种部署方式,官网都有详细的描述,我这里选择离线包安装,主要是以Docker-compose方式部署,快速搭建起来。
1.1 下载安装包
直接去官网下载你想要安装的版本。
1.2 解压安装
下载后的安装包上传到服务器的/opt目录下,你也可以放在你规划的目录。
[root@jumpserver ~]# cd /opt
[root@jumpserver opt]#
[root@jumpserver opt]# ls
jumpserver-ce-v4.10.16-x86_64.tar.gz
解压
tar -xvf jumpserver-ce-v4.10.16-x86_64.tar.gz
修改配置文件config-example.txt
# 存储路径,可以自定义
VOLUME_DIR=/data/jumpserver
# 对外访问端口,如果你有域名,可以使用https协议
# 需要将证书配置上
HTTP_PORT=80
# 数据库配置,可以用自建的,也可以直接用本地的
DB_ENGINE=postgresql
DB_HOST=postgresql
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=
DB_NAME=jumpserver
# Redis配置,最好将密码加上,默认没有
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=RedisPass
安装
sudo ./jmsctl.sh install
# 如果不加sudo的话,会提示/opt/jumpserver 这个文件夹没法创建,导致安装失败
根据提示信息,一路回车,全部使用默认的,如果需要使用其他的可以自己根据情况去配置
离线包方式如果你没有安装Docker环境,会自动给你安装
配置 IP 和域名两种方式正常访问
如果通过 IP 和域名两种方式正常访问的话,需要如下操作
- 安装配置命令sudo ./jmsctl.sh install过程中
- 正确回答脚本的提问:
当脚本再次运行到相关步骤时,请严格按照以下方式回答:
-
- Do you need to customize the JumpServer external port ? y/N: 输入 y 并按回车。
- JumpServer web port default: 8081 : 只输入端口号 18081,然后按回车。(这是最关键的一步,不要输入IP地址或域名!只要输入自己需要的端口即可,切记切记)
配置完成后,手动添加 DOMAINS:
安装脚本会顺利完成。之后,我们再手动编辑配置文件,添加允许多个域名访问的设置。
-
- 编辑配置文件
sudo nano /opt/jumpserver/config/config.txt
-
- 在文件末尾添加一行
DOMAINS=192.168.8.140:18081,jsssged.net:18081
(注意:这里端口号是 18081**,要和你刚才设置的端口保持一致)**
-
- 保存并退出(在 nano 编辑器中是 Ctrl+O 保存,Ctrl+X 退出)。
- 重启服务
sudo ./jmsctl.sh restart
完成以上步骤后,你的 JumpServer 就会监听
18081 端口,并且可以通过 IP 和域名两种方式正常访问了
启动JumpServer
sudo ./jmsctl.sh start
访问JumpServer
访问地址:[http://ip:端口](http://192.168.8.140:8081)
默认账号名/密码:admin/ChangeMe
使用JumpServer堡垒机
2.1 添加资产
在【控制台-->资产管理】模块下添加资产
我添加了一台Linux主机
2.2 资产授权
添加资产后还不能访问,需要对资产授权,企业中都会对不同的用户授权不同的权限
在【授权管理--> 资产授权】模块下新增授权
2.3 访问主机
控制台主要是做一些管理操作,要访问主机,需要切换到【工作台】
选中要访问的主机
可以看到已经访问成功了
整个过程也非常简单。这篇文章就写到这,如果你想了解更多功能,自己去JumpServer官方文档查看。
这份 jmsctl.sh 是 JumpServer 官方提供的统一管理脚本 ,它封装了对 Docker Compose 的各种操作,让你不用直接敲 docker-compose 命令。下面我为你逐层拆解它的设计思路和用法。
一、脚本整体定位
- 入口文件 :位于 JumpServer 安装目录(通常
/opt/jumpserver)根目录。 - 核心能力 :集成了安装、升级、启动、停止、备份、恢复、卸载等全生命周期管理。
- 设计模式 :命令分发器,通过第一个参数
action决定执行哪个子功能,第二个参数target作为子命令的目标(如服务名)。
二、脚本执行流程(main 函数)
- 检查操作系统 :
check_os函数会拒绝在 macOS 或 Windows(MINGW)上运行,并提示去专用安装包。 - 处理帮助命令 :如果是
help/-h/--help,直接显示usage并退出。 - 预检查配置 :对于非安装/配置类命令,调用
pre_check确保.env配置文件和软链接正常。 - 获取 Docker Compose 命令 :通过
get_docker_compose_cmd_line得到实际执行命令(可能是docker-compose或docker compose,取决于版本)。 - 根据 action 分发到具体函数或子脚本。
三、核心配置检查逻辑(pre_check 与 check_config_file)
- 配置文件位置 :默认是
./config.txt(通过CONFIG_FILE变量定义,在utils.sh中)。 - 软链接处理:
-
- 在项目根目录下创建
.env指向config.txt。 - 在
./compose/.env也创建软链接指向config.txt。 - 这样 Docker Compose 和子脚本都能统一读取配置。
- 在项目根目录下创建
- 失败处理:如果配置文件缺失,脚本会报错并退出(返回码 3)。
四、支持的命令(action)详解
|---------------------|----------------------------|----------------------------------------------------------------------|
| 命令 | 功能 | 额外说明 |
| install | 安装 JumpServer | 调用子脚本 4_install_jumpserver.sh |
| upgrade | 升级 JumpServer | 调用 7_upgrade.sh ,可带目标版本参数 |
| config | 配置工具 | 调用 config.sh ,可带子命令 |
| reconfig | 重新配置 | 先停掉所有容器(down -v),再调用 1_config_jumpserver.sh |
| start | 启动所有服务 | 执行 docker compose up -d |
| stop | 停止所有服务(保留数据) | 执行 docker compose down -v (会删除匿名卷) |
| restart | 重启服务 | 先 stop 再 start |
| status | 查看容器状态 | 执行 docker compose ps |
| down | 下线服务(完全停止并删除容器) | 不带参数则 down -v ,带服务名则只停止并删除该服务 |
| uninstall | 卸载 JumpServer | 调用 8_uninstall.sh ,清理数据和配置 |
| backup_db | 备份数据库 | 调用 5_db_backup.sh |
| restore_db [file] | 从备份文件恢复数据库 | 调用 6_db_restore.sh ,需指定备份文件路径 |
| load_image | 加载 Docker 镜像 | 调用 3_load_images.sh ,用于离线安装 |
| pull | 拉取最新镜像 | 可带服务名参数,只拉取特定服务 |
| tail [service] | 查看日志 | 不带参数则查看所有服务日志,带参数则只查看指定服务(自动补 jms_ 前缀) |
| cmd | 输出 docker compose 命令(用于调试) | 仅打印 EXE 变量内容 |
| raw | 执行原生 docker compose 命令 | 例如 ./jmsctl.sh raw ps -a ,会转发所有剩余参数 |
| video-worker | 管理视频处理服务(独立) | 支持 start/stop/restart/status,通过 get_video_worker_cmd_line 获取单独的命令行 |
| init_db | 执行数据库迁移 | 调用 perform_db_migrations 函数 |
| show_services | 列出所有服务名 | 通过 get_docker_compose_services 函数 |
| version | 显示当前版本 | 调用 get_current_version 函数 |
| check_update | 检查是否有新版本 | 比较当前版本与 GitHub 最新版本 |
五、特殊处理逻辑
1. 对 stop 和 down 的支持
stop不带参数:执行down -v(停止并删除容器,但会保留数据卷?注意-v会删除匿名卷,但命名卷会保留,具体看 compose 配置)。stop带服务名:只停止并删除该服务容器(stop+rm -f)。down不带参数:也是down -v,与stop效果相同(实际上stop调用了down -v,而down也是,似乎重复,但设计上允许)。
2. 视频处理服务独立管理
视频处理服务(可能是 video-worker)被单独抽离,通过 get_video_worker_cmd_line 获取对应的 docker compose 命令(可能指向不同的 compose 文件),然后支持 start/stop/restart/status。
3. 配置检查和软链接保障
每次执行非安装类命令前都会检查配置文件是否存在,并确保 .env 软链接正确,避免因配置缺失导致启动失败。
六、依赖的外部脚本和工具函数
- scripts/utils.sh:提供了所有底层函数,包括:
-
get_docker_compose_cmd_line:检测docker compose插件或docker-compose命令。get_current_version:从镜像或配置文件读取版本。get_latest_version:从 GitHub API 获取最新版本。perform_db_migrations:执行 Django 数据库迁移。pull_images:拉取所有服务镜像。get_video_worker_cmd_line:获取视频处理服务的 compose 命令。- 其他工具(如颜色输出、日志函数等)。
- 子脚本 :
4_install_jumpserver.sh,7_upgrade.sh,config.sh,1_config_jumpserver.sh,8_uninstall.sh,5_db_backup.sh,6_db_restore.sh,3_load_images.sh等,分别承担更复杂的逻辑。
七、注意事项
- 必须存在 config.txt:脚本强制要求配置文件存在,否则无法管理。
- 环境限制:不支持 macOS 和 Windows 原生环境,需使用 Docker 专用安装方式。
- 数据持久化 :
down -v会删除匿名数据卷,但命名卷(如jumpserver_data)不会受影响,所以通常数据安全。 - 视频处理服务独立 :如果你未使用视频处理功能,可以忽略
video-worker相关命令。 - 升级前建议备份 :官方推荐在执行
upgrade前先用backup_db备份数据库。
八、快速上手示例
bash
# 首次安装
./jmsctl.sh install
# 启动服务
./jmsctl.sh start
# 查看状态
./jmsctl.sh status
# 查看所有日志
./jmsctl.sh tail
# 只看 core 服务日志
./jmsctl.sh tail core
# 停止所有服务
./jmsctl.sh stop
# 备份数据库
./jmsctl.sh backup_db
# 升级到最新版
./jmsctl.sh upgrade
# 执行原生 compose 命令(如重启某个服务)
./jmsctl.sh raw restart jms_core