JumpServer 部署实战:三步搭好开箱即用的开源堡垒机

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. 【免费下载链接】jumpserver 项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver

凌晨两点,报警群突然炸了。核心业务服务器宕机,生产环境一片红灯,而唯一掌握 root 密码的同事,此刻正在十万八千里外的海岛度假。是不是隔着屏幕都能感到窒息?这几乎是每一支运维团队的噩梦——服务器的命脉,握在个别人手里。

JumpServer 就是为解决这类问题而生的开源特权访问管理(PAM)平台。它能让你和你的团队通过浏览器安全地访问 SSH、RDP、Kubernetes、数据库和 RemoteApp 资源,账号密码不再散落在个人笔记里,每次登录都有审计、有录屏、有权限控制。更妙的是,它自带一套 Ansible 自动化引擎,装好之后还能替你自动巡检资产、批量改密。

这篇文章就带你从零动手,把 JumpServer 部署起来。全程照着敲命令就能跑通,读完你会有三样收获:一个能登录的堡垒机、一个被它管理的真实服务器、以及一套可以搬进生产环境的配置思路。

别慌,先搞懂 JumpServer 是干什么的

先花一分钟建立认知。JumpServer 的核心思路很简单:所有人都别直连服务器,统一走它这一道门。你登录 JumpServer,再从它的网页终端里连目标机器,所有操作都会被记录。

它由多个组件协同工作,各自负责不同协议:

组件职责一句话解释
LinaWeb 用户界面你看到和操作的控制台
LunaWeb 终端浏览器里的 SSH 窗口
KoKo字符协议连接器接管 SSH / Telnet 连接
Lion图形协议连接器接管 RDP / VNC 图形会话
ChenWeb 数据库工具浏览器里直接连数据库
Tinker远程应用连接器发布 Windows 应用

你不用关心它们怎么协同,只需知道:装一个 JumpServer,就等于同时拥有了上面这些能力。相关代码组织在项目的 apps/ 目录下,每个组件对应一个子模块,结构非常清晰。

三分钟起跑:先让堡垒机跑起来

实践出真知。我们先装一个最小可用版本,让你立刻看到成果,再去考虑生产环境的那些讲究。

环境清单

先确认你的机器满足最低要求:

配置项最低要求推荐配置
操作系统CentOS 7 / Ubuntu 20.0464 位 Linux 发行版
CPU2 核4 核
内存4 GB8 GB
磁盘50 GB SSD100 GB SSD
Python3.9+3.10+
Redis任一可用版本6.0+

注意:Redis 是必需项,JumpServer 的任务调度和 WebSocket 都要靠它。PostgreSQL 我们先用 SQLite 顶替,Demo 阶段完全够用。

第一步:拉取代码并生成配置

git clone https://gitcode.com/GitHub_Trending/ju/jumpserver
cd jumpserver

# 用项目自带的模板生成配置文件
cp config_example.yml config.yml

config_example.yml 是官方精心写好的配置模板,每一项都有中文注释,非常贴心。复制一份出来,我们只需要改极少几个地方。

第二步:填写三个关键值

生成一个 49 位随机字符串作为加密密钥:

cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49; echo

然后编辑 config.yml,找到对应位置填进去:

# 加密密钥,生产环境务必使用随机字符串
SECRET_KEY: 上面命令生成的随机串

# 预共享令牌,各组件注册服务账号时使用
BOOTSTRAP_TOKEN: 再生成一个随机串

# Demo 阶段用单文件 SQLite,最省事
DB_ENGINE: sqlite3
DB_NAME: /opt/jumpserver/data/db.sqlite3

# Redis 保持默认,密码留空即可(本机单机场景)
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379

第三步:一键启动

项目自带服务控制工具 jms,一个命令搞定:

python jms start all -d

-d 表示后台守护进程方式运行。等几秒钟,检查一下状态:

python jms status

看到所有服务都是 running,恭喜你,堡垒机已经跑起来了。首次启动会自动完成数据库初始化、静态文件收集等一系列准备工作,你不需要手动执行任何迁移命令。

打开浏览器,访问 http://你的服务器IP:8080,用默认账号登录:

  • 用户名:admin
  • 密码:ChangeMe

JumpServer 部署完成后的登录界面示意图

登录成功的这一刻,你就已经拥有一台完整的开源堡垒机了。是不是比想象中快得多?

第一次登录:改密码,加一道 MFA 锁

第一次登录后,系统会强制你修改默认密码。这一步千万别偷懒跳过——默认密码 admin / ChangeMe 是全网公开的,不修改等于把大门钥匙挂在门口。

改完密码后,建议立刻开启手机验证器(MFA)。在个人中心找到"设置手机验证器",用身份验证器 App 扫描二维码完成绑定。以后每次登录除了密码,还要填一个动态验证码。

JumpServer 手机验证器绑定二维码示意图

多花这三十秒,你的 JumpServer 部署就从"能用"升级成了"敢用"。

把第一台服务器交给 JumpServer 打理

堡垒机装好了,现在让它真正干活。在控制台里新建一台 Linux 资产,填上 IP、协议、端口、账号密码,保存后点击"测试连接"。

你会看到结果瞬间返回。如果一切正常,点击"连接",一个网页版 SSH 终端就弹出来了。你在这台终端里敲的每个命令,都会被完整录制,随时可以回放审计。

试试用 mysqlpsql 客户端连接数据库资产、用 Luna 开一个图形化 RDP 会话——你会发现原来需要装一堆客户端软件的事情,现在浏览器全搞定了。

它到底怎么替你干活?一页纸看懂自动化引擎

连接资产只是开始,JumpServer 真正的杀手锏,是内置的 Ansible 自动化能力。你可以在"任务管理"里创建周期性的资产巡检、密码修改、账号收集任务,让堡垒机定时自动执行。

这一切的入口,定义在 apps/ops/ansible/interface.py

class RunnerInterface:
    def run(self, **kwargs):
        runner = self.get_runner_type()(**kwargs)
        return runner.run()

别被这短短几行唬住,背后的流程是这样的:

  1. 你在界面上点"执行任务"
  2. 任务被投递到名为 ansible 的专用队列(Celery)
  3. 队列里的执行器读取资产信息和认证凭据
  4. Ansible 运行器远程连接目标机器执行 playbook
  5. 每一步执行结果通过事件回调实时回传界面

比如项目 apps/assets/tasks/ping.py 里的连通性检查任务,就是用这种方式实现的:

@shared_task(queue='ansible', ignore_result=True)
def ping_asset(asset_id, account_id=None):
    ...
    do_ping(asset, account=account)

任务队列单独隔离,意味着自动化巡检不会拖慢核心业务。生产环境还可以开启"Ansible 执行隔离"(对应 apps/ops/ansible/docker.py 中的 ANSIBLE_DOCKER_ENABLED 配置),让自动化任务跑在独立容器里,跟主服务物理隔离,安全性再上一个台阶。

从试用走向生产:配置文件这样改更稳

Demo 跑通了,接下来把配置升级到生产级。核心改动有三处。

1. 换用 PostgreSQL

SQLite 适合单机尝鲜,生产环境请务必换 PostgreSQL。先在 config.yml 里改数据库配置:

DB_ENGINE: postgresql
DB_HOST: 127.0.0.1
DB_PORT: 5432
DB_USER: jumpserver
DB_PASSWORD: 你的数据库密码
DB_NAME: jumpserver

2. 设置合理的超时与日志

config_example.yml 里预置了一批生产可用的超时参数,按需打开注释即可:

# 日志级别,生产建议 INFO
LOG_LEVEL: INFO

# Ansible 单批次超时(秒)
ANSIBLE_RUNNER_JOB_TIMEOUT: 1800
# 连续无输出判定卡死(秒)
ANSIBLE_RUNNER_IDLE_TIMEOUT: 900

3. 开启密码保险箱

JumpServer 内置 OpenBao 作为 Vault 后端,可以把所有资产密码统一加密保管:

VAULT_ENABLED: true
VAULT_BACKEND: openbao
VAULT_OPENBAO_ADDR: http://openbao:8200

开启后,即使数据库被攻破,攻击者拿到的也是一堆密文。

多环境怎么管?

生产、测试、开发三套环境,不用维护三份配置文件。config.yml 中所有敏感值都支持用环境变量覆盖,配合 CI/CD 在部署阶段注入即可,代码仓库里只保留模板。

验收清单:照着勾,全部打勾才算数

部署是不是真的成功了?用下面这份清单逐项验收:

  •  浏览器能正常打开 http://IP:8080 并出现登录页
  •  使用 admin 登录成功,且已强制修改初始密码
  •  已绑定手机验证器,重启浏览器后能正常二次验证登录
  •  成功添加至少一台 Linux 资产,且"测试连接"返回成功
  •  通过网页终端打开 SSH 会话,敲几个命令验证流畅度
  •  会话结束后,在"审计"里能找到对应录像记录
  •  成功创建一个定时任务(如每周资产连通性巡检)并手动触发一次
  •  生产环境已切换到 PostgreSQL,并确认重启后数据不丢失

全部勾上,你的 JumpServer 部署才算真正交付。

踩坑地图:新手最容易翻车的 5 个地方

即使照着步骤走,也会遇到一些拦路虎。我把高频问题整理成了快速修复表:

症状常见原因快速修复
访问 8080 打不开防火墙未放行 / 端口被占用firewall-cmd --add-port=8080/tcp 或检查 ss -lntp
启动时报数据库连接失败数据库未启动或密码错误确认服务运行中,核对 config.yml 中的账号密码
首次启动反复重启SECRET_KEY / BOOTSTRAP_TOKEN 为空cat /dev/urandom 命令重新生成并填写
任务执行报权限不足目标机器的 sudo 未配置免密在目标机配置 username ALL=(ALL) NOPASSWD: ALL
开启执行隔离后任务失败Ansible 执行镜像未拉取在 worker 节点执行 docker pull jumpserver/ansible-executor:latest

排查日志是最快的定位手段,日志默认输出到应用日志目录,遇到问题先 tail 日志再看别的。

写在最后:下一步往哪走

到这里,你已经完成了 JumpServer 的从零部署、首次配置、资产纳管和自动化任务设置,比"照着文档装好"更进一步——你已经理解了它内部是怎么转起来的。

接下来你可以按需深入:

  • 学习更多配置项,项目根目录的 config_example.yml 本身就是最好的中文手册
  • 研究自动化模块源码,起点是 apps/ops/ansible/,从 interface.py 往下读
  • 给你的运维团队制定接入规范,把账号收敛、权限最小化落到制度上
  • 定期用 utils/backup_db.sh 备份数据库,并加入 crontab 定时执行

服务器密码不应该只存在于某个人的记忆里。从这次 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. 【免费下载链接】jumpserver 项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值