快速搭建Jumpserver堡垒机

Jumpserver堡垒机

快速搭建Jumpserver堡垒机

一款广受欢迎的开源堡垒机:JumpServer

它主要是帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。

github已经收获30K+star,还是非常多人使用的,也有商业版,小企业用开源版足够了。

github项目地址:GitHub - jumpserver/jumpserver: JumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser. · GitHub

下面详细讲解如何部署和使用JumpServer。

1 部署JumpServer

官网文档:JumpServer 文档

有多种部署方式,官网都有详细的描述,我这里选择离线包安装,主要是以Docker-compose方式部署,快速搭建起来。

1.1 下载安装包

开源社区 - FIT2CLOUD 飞致云

直接去官网下载你想要安装的版本。

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 和域名两种方式正常访问的话,需要如下操作

  1. 安装配置命令sudo ./jmsctl.sh install过程中
  2. 正确回答脚本的提问:

当脚本再次运行到相关步骤时,请严格按照以下方式回答:

    • 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 退出)。
  1. 重启服务

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 函数)

  1. 检查操作系统check_os 函数会拒绝在 macOS 或 Windows(MINGW)上运行,并提示去专用安装包。
  2. 处理帮助命令 :如果是 help/-h/--help,直接显示 usage 并退出。
  3. 预检查配置 :对于非安装/配置类命令,调用 pre_check 确保 .env 配置文件和软链接正常。
  4. 获取 Docker Compose 命令 :通过 get_docker_compose_cmd_line 得到实际执行命令(可能是 docker-composedocker compose,取决于版本)。
  5. 根据 action 分发到具体函数或子脚本

三、核心配置检查逻辑(pre_checkcheck_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. 对 stopdown 的支持

  • 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 等,分别承担更复杂的逻辑。

七、注意事项

  1. 必须存在 config.txt:脚本强制要求配置文件存在,否则无法管理。
  2. 环境限制:不支持 macOS 和 Windows 原生环境,需使用 Docker 专用安装方式。
  3. 数据持久化down -v 会删除匿名数据卷,但命名卷(如 jumpserver_data)不会受影响,所以通常数据安全。
  4. 视频处理服务独立 :如果你未使用视频处理功能,可以忽略 video-worker 相关命令。
  5. 升级前建议备份 :官方推荐在执行 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
相关推荐
2601_962297254 天前
JumpServer使用OpenID对接Azure AD身份认证
堡垒机·jumpserver·身份认证·openid·azuread
i网路游侠7 天前
免费堡垒机 | 福瑞智能运维审计系统(堡垒机)?
运维·堡垒机·等级保护·运维审计·运维安全审计
便利店10241 个月前
边界与远程:墙、洞与加密通道
运维·服务器·防火墙·acl·nat
杨浦老苏1 个月前
开源堡垒机 Warpgate:一个容器搞定 SSH、MySQL 和 Web 访问
运维·docker·ssh·堡垒机·群晖
不剪发的Tony老师2 个月前
Warpgate:一款免费开源的堡垒机
堡垒机
碎碎念_4922 个月前
ACL包过滤、NAT技术、广域网协议
服务器·网络·安全·acl·nat
闲猫3 个月前
从0到1完整开发Smartshell最后沉淀出的Cursor开发规则
linux·运维·堡垒机·cursor·vibecoding
小鹏linux4 个月前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
X7x54 个月前
堡垒机:企业运维安全的“数字守门人“
网络安全·网络攻击模型·安全威胁分析·堡垒机·安全架构