
1. 项目概述为什么我们需要自己的堡垒机在运维的日常里服务器管理是个绕不开的活。想象一下一个稍微有点规模的公司开发、测试、线上环境加起来几十上百台服务器是常事。如果每个运维、每个开发都拿着自己的账号密码直接登录那场面简直是一场灾难。权限混乱、操作无法追溯、密码泄露风险陡增更别提那些离职员工可能还留着后门。这时候一个集中、安全、可控的入口就显得至关重要这就是堡垒机Bastion Host的核心价值。Jumpserver作为一款广受欢迎的开源堡垒机正是为了解决这些问题而生。它不是一个简单的跳板机而是一个完整的运维安全审计平台。简单来说它就像是你所有服务器大门前的一个“超级前台”。任何人想进入任何一台服务器都必须经过这个前台登记、授权、记录甚至全程录像。你不再需要把服务器的SSH密码或RDP密码直接分发给个人而是通过Jumpserver来统一分配账号、管理资产、控制权限并且所有操作都有迹可循。最近在社区里关于Jumpserver的讨论热度不减尤其是几个具体的使用痛点比如通过堡垒机远程Windows时提示连接失败但用本地mstsc却正常又比如在连接Ubuntu系统后如何快速创建一个和当前用户权限一致的新账号。这些问题恰恰反映了从“能用”到“用好”的跨越是每个运维在落地堡垒机时都会遇到的真实挑战。接下来我就结合自己多年的部署和运维经验从头到尾拆解Jumpserver不仅告诉你它是什么更重点分享如何把它部署稳、配置对、用得好以及如何解决那些令人头疼的“坑”。2. 核心架构与组件深度解析2.1 Jumpserver的四大核心组件Jumpserver采用松耦合的微服务架构理解其组件是后续部署和排错的基础。它主要包含以下四个核心部分它们各司其职共同协作Core核心组件这是Jumpserver的大脑和指挥中心。提供Web UI界面负责用户管理、资产服务器、网络设备等管理、权限策略资产授权、系统用户授权的配置。我们所有的管理操作比如创建用户、给服务器分组、分配权限都是在这里完成的。它本身不直接处理运维协议流量。KokoSSH/RDP/Linux Telnet网关这是负责连接Linux/Unix类资产和Windows资产的协议代理。当用户通过Web终端要SSH到一台Linux服务器时请求会先到CoreCore校验权限后会通知Koko去建立实际的SSH连接。Koko就像一个“翻译官”和“录像师”它既负责协议转换将WebSocket等协议转换为标准SSH协议也负责录制所有的命令行操作会话。对于Windows资产它则通过集成原生RDP协议或借助其他工具来实现连接。LinaWeb终端前端这是用户实际进行操作的前端界面。我们登录Jumpserver网页后那个可以输入命令的黑色终端窗口就是Lina渲染的。它负责与用户浏览器交互将用户的键盘输入、窗口调整等操作通过WebSocket传递给后端的Koko或Core。LunaWeb终端前端/旧版这是旧版的Web终端前端目前新版本默认使用Lina。但在一些老部署或特定场景下可能还会遇到。了解即可主要关注Lina。除了这四个在集群部署或高可用场景下还会用到Coco旧版SSH网关已逐渐被Koko替代和Guacamole一个优秀的开源HTML5远程桌面网关Jumpserver用它来增强对Windows、VNC等图形化协议的支持。对于绝大部分场景我们只需要理清Core、Koko、Lina的关系就够了用户在Lina界面上操作 - Core进行认证和授权 - Koko建立真实连接并录像。2.2 部署模式选择All-in-One vs. 分布式部署前第一个要做的决策就是模式选择。这直接关系到后续的维护复杂度和系统性能。All-in-One一体化部署这是最快速、最简单的入门方式。使用官方提供的安装脚本会将Core、Koko、Lina、数据库MySQL/MariaDB、Redis等所有组件安装在一台服务器上。优点部署极其简单一条命令curl -sSL https://github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash就能完成基础安装适合个人学习、测试环境或小团队资产数小于50台使用。缺点所有组件耦合一旦这台服务器出问题整个堡垒机服务就中断了。性能扩展性差当并发会话增多时所有组件争抢资源。实操建议如果你是第一次接触Jumpserver强烈建议在虚拟机里用All-in-One方式先跑一遍熟悉整个流程和配置。生产环境如果规模很小且对可用性要求不高也可暂时采用但务必做好整机备份。分布式/组件化部署这是生产环境的推荐方式。将各个组件部署在不同的服务器上实现解耦和水平扩展。优点高可用一个组件故障不影响其他组件例如Koko可以部署多台做负载均衡。性能好可以根据压力单独扩展某个组件比如多部署几个Koko实例应对大量并发连接。安全性更高可以更精细地控制网络访问策略。缺点部署和后期维护复杂需要手动配置组件间的网络通信、依赖服务独立的数据信、Redis。实操建议对于任何正式的业务环境都应规划分布式部署。至少将数据库MySQL独立出来Core和Koko也可以分开。你可以参考官方Docker Compose或Kubernetes的部署方案它们天然适合分布式架构。注意无论哪种模式安装前务必确保服务器满足基本要求纯净的CentOS 7/Ubuntu 18.04系统至少4核CPU、8GB内存、100GB磁盘会话录像很占空间并开放所需端口Core Web的80/443SSH的2222等。3. 从零到一的安装与初始化配置实战3.1 基于离线安装包的稳定部署在线安装脚本虽然方便但在国内网络环境下有时会因拉取Docker镜像或依赖包而失败。因此我更推荐使用离线安装包过程更可控。这里以CentOS 7.x为例。首先访问Jumpserver的GitHub Release页面下载最新稳定版的离线安装包通常是一个.tar.gz文件和对应的安装脚本。# 假设你已经下载了 jumpserver-offline-installer-v3.0.0.tar.gz 和 quick_start.sh # 1. 上传安装包和脚本到服务器 /opt 目录 # 2. 解压安装包 cd /opt tar -xf jumpserver-offline-installer-v3.0.0.tar.gz # 3. 进入解压后的目录修改配置文件 cd jumpserver-offline-installer-v3.0.0 cp config-example.txt config.txt vim config.txt配置文件config.txt是关键你需要重点关注以下参数并修改# 核心配置 VOLUME_DIR/opt/jumpserver/data # 数据持久化目录一定要改到数据盘空间要大 DOCKER_SUBNET172.20.0.0/24 # Docker容器网络避免和现有网络冲突 # 数据库配置如果使用外置数据库则注释掉内置的Mysql配置 # USE_EXTERNAL_MYSQL1 # DB_HOST192.168.1.10 # DB_PORT3306 # DB_USERjumpserver # DB_PASSWORDStrongPassword! # DB_NAMEjumpserver # Jumpserver核心配置 SECRET_KEYyour-secret-key-here # 必须改为一个随机的复杂字符串可用openssl rand -base64 48生成 BOOTSTRAP_TOKENyour-bootstrap-token # 同上用于组件间通信认证 LOG_LEVELERROR # 生产环境建议ERROR减少日志量 # SESSION_COOKIE_AGE86400 # 会话cookie过期时间可按需调整修改完毕后执行安装脚本# 给予执行权限并运行 chmod x quick_start.sh ./quick_start.sh脚本会自动安装Docker、加载镜像、初始化数据库并启动所有服务。整个过程大约5-10分钟取决于服务器性能。看到“Installation complete, please visit http://IP”的提示即表示成功。实操心得SECRET_KEY和BOOTSTRAP_TOKEN务必在安装前就生成并填写安装后再修改非常麻烦需要手动更新数据库和多个配置文件。VOLUME_DIR一定要指向一个足够大的独立磁盘分区。录像和文件上传都会存在这里我遇到过因为默认目录/var/lib/docker所在根分区被录满导致整个服务器瘫痪的情况。安装完成后第一时间通过docker ps命令检查所有容器jms_core, jms_koko, jms_lina等是否都处于Up状态。3.2 至关重要的初始化设置安装完成通过IP访问Web界面后会进入初始化向导。这一步看似简单却决定了堡垒机的基础安全性和可用性。管理员账号设置不要使用默认的admin作为用户名。创建一个不易被猜测的管理员账号并设置强密码大小写字母、数字、特殊字符组合长度大于12位。这个账号拥有最高权限务必妥善保管。系统名称与页脚填写公司或团队名称这会在登录页和页面页脚显示增加辨识度。邮件服务器配置这是极易忽略但极其重要的一步正确配置SMTP邮件服务器如公司自建邮箱或阿里云、腾讯企业邮。它的作用不仅仅是发送通知邮件更重要的是用户密码重置用户忘记密码时通过邮件找回是唯一安全途径。MFA多因子认证绑定当用户绑定Google Authenticator等MFA应用时需要邮件验证。工单、授权等通知所有流程性通知都依赖邮件。 如果这里不配或配错后续用户无法自助服务所有密码和MFA问题都需要管理员手动在数据库里解决运维负担极重。完成初始化提交后使用刚创建的管理员账号登录你就进入了Jumpserver的管理后台。4. 资产、用户与权限体系实战配置堡垒机的核心是管理“谁”能通过“什么身份”访问“哪台设备”并“做什么”。对应到Jumpserver就是用户 - 系统用户 - 资产的授权模型。4.1 资产管理纳管你的服务器资产就是你需要管理的服务器、网络设备等。在“资产管理”-“资产列表”中创建。节点可以理解为文件夹用于对资产进行树形分类例如按“业务线电商/支付”、“环境生产/测试”、“地域北京/上海”来组织。创建资产填写资产名称便于识别、IP地址、管理协议SSH/ RDP等、端口。这里有个关键点“管理端口”。对于SSH通常不是22端口因为Jumpserver的Koko服务默认会占用2222端口来代理SSH流量。你应该填写资产服务器上SSH服务实际监听的端口通常是22。同理Windows的RDP默认是3389。平台选择正确的操作系统如Linux/Windows这会影响后续可用的系统用户类型和连接方式。注意事项批量纳管时可以使用“资产导入”功能通过CSV模板文件快速导入。确保IP、协议、端口信息准确。4.2 系统用户管理连接资产的钥匙“系统用户”是Jumpserver中的一个核心概念它不是Jumpserver的登录用户而是存储在Jumpserver中、用于登录到具体资产的账号凭证。可以把它理解为一把把存放在堡垒机保险柜里的、通往不同服务器的钥匙。创建系统用户时主要有两种认证方式密码认证直接填写该账号在目标资产上的密码。适用于密码固定的场景。SSH密钥认证上传该账号的私钥或由Jumpserver自动生成一对密钥。这是更安全、更推荐的方式特别是在Linux资产上。选择“自动生成”时Jumpserver会创建一对密钥你只需要将生成的公钥部署到目标服务器的相应用户.ssh/authorized_keys文件中即可。这里回答一个热搜问题“jumpserver连接ubuntu系统后如何创建一个和当前用户同权限的另外一个账号”这个需求其实不是在Jumpserver的Web终端里操作而是指你通过Jumpserver以某个系统用户比如deploy登录Ubuntu服务器后想在该服务器上创建一个新的Linux用户并赋予其和deploy用户相同的权限比如sudo权限。方法如下通过Jumpserver连接到目标Ubuntu服务器。执行sudo visudo如果deploy用户有sudo权限。在文件中找到给deploy用户授权的一行例如deploy ALL(ALL:ALL) ALL复制这一行将用户名改为你要创建的新用户名例如newuser。保存退出。创建新用户sudo adduser newuser。现在newuser就拥有了和deploy相同的sudo权限。如果你想完全复制所有组关系还可以使用usermod -aG group1,group2 newuser命令。4.3 用户管理与权限分配“用户管理”里创建的是登录Jumpserver Web控制台的用户。你可以创建普通用户并为他们分配角色。权限的分配是通过“授权规则”来实现的。创建授权规则在“权限管理”-“资产授权”中创建。选择用户可以是单个用户也可以是用户组提前在“用户管理”中创建。选择资产可以是单个资产、某个节点下的所有资产或者通过标签动态选择。选择系统用户这是最关键的一步决定了用户使用哪把“钥匙”去开锁。你可以授权多个系统用户给用户用户在连接时可以选择使用哪一个。设置动作权限可以细粒度控制用户是否能连接、上传、下载、复制、粘贴等。实操心得遵循最小权限原则。不要图省事给一个用户授权所有资产的所有权限。建议按角色创建授权例如“开发人员-测试环境-只读权限”、“运维人员-生产环境-读写权限”。这样即使账号泄露影响范围也有限。5. 连接协议详解与经典故障排查5.1 SSH连接Linux/Unix资产这是最常用的场景。配置正确后用户在Web终端点击连接体验几乎和本地终端一样。关键在于系统用户的认证方式密码/密钥必须和资产上该用户的实际情况匹配。常见问题排查连接超时/被拒绝检查Jumpserver服务器到资产服务器的网络是否通畅telnet 资产IP SSH端口。检查资产防火墙是否放行了Jumpserver服务器IP的入站连接。确认资产SSH服务正在运行systemctl status sshd。认证失败密码认证确认密码是否正确注意特殊字符。密钥认证这是最易出错的地方。确保Jumpserver上系统用户配置的私钥是正确的并且对应的公钥已经准确无误地添加到了资产服务器对应用户家目录的~/.ssh/authorized_keys文件中。检查文件权限.ssh目录应为700authorized_keys文件应为600。5.2 RDP连接Windows资产解决“无法连接”难题这是热搜中的高频问题“堡垒机远程windows操作系统时提示无法连接远程使用本地mstsc远程桌面正常”。这意味着从堡垒机到Windows的链路有问题而直连是好的。排查思路如下原因分析与解决方案表问题现象可能原因排查步骤与解决方案通过Jumpserver连接Windows失败提示“无法连接”或“身份验证错误”但本地mstsc正常。1. 网络或防火墙问题在Jumpserver所在的服务器上使用telnet Windows_IP 3389测试端口连通性。不通则检查Windows防火墙入站规则是否放行了Jumpserver服务器IP对3389端口的访问。2. 资产配置协议/端口错误检查Jumpserver中该Windows资产的“管理协议”是否为“RDP”端口是否为3389或自定义的RDP端口。3. 系统用户凭据错误检查用于连接Windows的“系统用户”其用户名格式是否正确如domain\user或userdomain对于域用户本地用户直接用username密码是否正确。在Windows上尝试用此凭据本地登录验证。4. Windows系统安全策略限制这是最常见的原因Windows默认可能不允许“网络级别身份验证(NLA)”或限制了非管理员用户的远程连接。解决方案在Windows上WinR输入sysdm.cpl- “远程”选项卡 - 确保“允许远程连接到此计算机”已勾选并尝试取消勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”。5. 用户权限不足确保用于连接的系统用户属于“Remote Desktop Users”组。以管理员身份运行CMD执行net localgroup Remote Desktop Users username /add。6. Jumpserver的Guacamole服务问题Jumpserver通过Guacamole组件代理RDP。检查jms_guacamole容器是否正常运行(docker ps | grep guacamole)。查看其日志(docker logs jms_guacamole)是否有错误。分步排错指南基础检查确认资产IP、协议、端口在Jumpserver中配置正确。网络检查在Jumpserver服务器上测试到Windows 3389端口的连通性。Windows本地策略调整关键步骤暂时关闭Windows防火墙进行测试仅用于排查生产环境需配置规则。调整远程桌面设置取消“仅允许网络级别身份验证”。将用户加入远程桌面用户组。凭证验证在Windows服务器上尝试用系统用户配置的账号密码进行本地登录或切换用户登录确保凭证有效。查看日志连接失败时Jumpserver的Web界面通常会有简要错误提示。同时在“会话管理”-“终端会话”中找到失败的会话记录查看“详情”或“日志”里面可能有更具体的错误信息。实操心得Windows连接问题90%以上集中在Windows本机的安全策略和用户权限上。建议在纳管Windows资产前先手动用mstsc测试目标账号能正常登录然后在Windows上统一配置好组策略和防火墙规则再在Jumpserver中添加资产可以避免大量后续麻烦。6. 高阶应用与安全加固6.1 会话录像与审计运维的“黑匣子”所有通过Jumpserver进行的操作都会被全程录像文本命令记录和RDP图形录像。这是堡垒机审计功能的核心。录像回放在“审计管理”-“会话录像”中可以按用户、资产、时间检索历史会话。对于命令行会话可以像播放视频一样回放并支持下载录像文件。命令审计所有执行的命令都会被解析记录。可以设置命令过滤器对高危命令如rm -rf /、dd、passwd进行实时告警或阻断。实操心得定期检查录像存储目录的磁盘空间。可以设置日志轮转策略或将会话录像存储到专用的NAS或对象存储如S3兼容存储中通过修改config.txt中的VOLUME_DIR或配置外部存储实现。6.2 多因子认证MFA与OTP绑定强制启用MFA能极大提升账号安全性。Jumpserver支持TOTP基于时间的一次性密码如Google Authenticator、Microsoft Authenticator等应用。用户在首次登录或管理员强制启用后系统会提示绑定。此时会出现一个二维码和一段otpauth://开头的URI正如热搜词中出现的otpauth://totp/jumpserver:wangyuming?secret...。用户用认证器App扫描二维码即可完成绑定。管理员注意事项可以在“用户管理”中强制要求特定用户或所有用户启用MFA。如果用户丢失了MFA设备管理员可以在该用户的详情页中“重置MFA”这会使用户的现有绑定失效用户下次登录时需要重新绑定。otpauth://链接中的secret参数就是密钥务必保密。6.3 网域与网关管理隔离网络资产对于不能直接通过互联网访问的资产如IDC内网服务器可以通过“网域”功能来纳管。你需要在内网部署一台“网关服务器”也称为“网域代理”这台服务器需要能同时访问Jumpserver核心服务和内网资产。Jumpserver的Koko组件会通过这台网关去连接内网资产从而实现跨网络的管理。6.4 定期备份与升级备份定期备份两部分数据1)数据库使用mysqldump备份Jumpserver数据库。2)持久化数据备份VOLUME_DIR目录通常是/opt/jumpserver/data里面包含了录像、上传的文件、配置文件等。升级关注官方Release公告。升级前务必做好全量备份。对于All-in-One安装通常也是下载新版离线包运行升级脚本。分布式部署需要按组件依次升级并注意版本兼容性。部署和运维Jumpserver是一个持续调优的过程从最初的“连通就好”到后来的“权限要细”、“审计要全”、“性能要稳”。它不仅仅是技术工具更是一种运维安全理念的落地。开始可能会觉得配置繁琐但一旦流程跑顺它带来的安全提升和运维规范化的价值会让你觉得所有投入都是值得的。最关键的是遇到问题别慌多查日志Core、Koko、Guacamole的容器日志多利用社区大部分坑都已经有前辈踩过了。