首页 / 资讯中心 / 文章详情

Jump Server资源包实战:统一入口与审计的跳板机部署指南

Jump Server资源包实战:统一入口与审计的跳板机部署指南 ★ FEATURED ARTICLE
简介这是一套面向运维人员与系统管理员的 JumpServer 堡垒机 v2.1.0 部署资源包解决在 CentOS 7 环境下快速搭建运维审计入口的问题。压缩包内共 3 个文件包含 JumpServer v2.1.0 源码包tar.gz、用于完整性校验的 MD5 文件以及封装安装逻辑的一键部署脚本 quick_start.sh整体大小仅约 6.19MB便于下载与分发。MD5 校验文件可确保源码包未被篡改quick_start.sh 则实现了无人值守式的部署流程用户只需准备一台满足 2核4G 最低配置、可访问互联网的 64 位 CentOS 7 主机以 root 身份执行脚本即可完成安装。资源同时附有官方推荐的一键安装命令并覆盖部署前的环境检查与源码校验等关键环节适合需要快速验证堡垒机功能、搭建测试环境或进行内网离线部署的运维初学者与 IT 管理者。目前已有 556 人学习下载可作为低成本搭建审计与认证基础设施的入门参考资料。1. jump server 资源包在运维场景里到底解决什么问题做运维的人手里都攒着十几台甚至几十台 Linux 主机的连接信息每台一个 IP、一组密码或者一把私钥。某天排查一个线上问题来回切换终端窗口粘了三四次密码最后发现连错机器了。这种场景下jump server 就是那个把所有入口收敛到一点的跳板服务。手里这份 jump server-v2.1.0.rar 是个打包好的资源——服务端程序、初始化脚本、配置模板、客户端连接示例都在里面解压后可以直接按文档搭起来解决多台机器入口分散、审计缺失、账号难回收的问题。它适合两类人一类是刚接触跳板机的小团队想用最少的时间把入口统一起来另一类是已经用了 SSH 直连、但被混乱的密钥管理和无痕操作搞到头大的独立开发者。v2.1.0 这个版本在配置结构上做了收敛端口、用户、白名单都集中在单个配置文件中后续改权限不用再去各个机器上翻文件。下文从选型原理、部署实操、避坑清单、审计收尾到进阶技巧把整套资源完整过一遍。2. 跳板机选型与网络规划为什么我不直接用一台普通 Linux 做中转2.1 先弄懂跳板机的三种形态别一上来就装服务很多人拿到 jump server 资源包后犯的第一个错误是把它理解成一个需要安装的软件。实际上跳板机有纯网络层和代理层两种思路。纯网络层最简单用一台云主机装好 SSH 服务所有目标机器的管理网段都只放行这台机器的 IP这就是最原始的跳板。代理层则是在 SSH 之上叠加了认证、授权和审计逻辑用户连上跳板后要经过身份校验才能继续跳转。v2.1.0 资源包里的内容更接近后者它提供了服务端认证脚本和转发配置模板。换句话说它不是一个重型的堡垒机系统而是一套轻量的SSH 跳板增强方案。原理上的核心差异在于普通 Linux 中转只解决能连到目标机器的问题不解决谁在什么时间用哪个身份连到哪台机器的问题。后者需要把 SSH 的认证日志留存在跳板上甚至配合命令记录。选型时可以从三个维度判断自己要不要上这种方案目标机器数量是否超过十台、是否有审计需求、是否有临时授权需求。如果三条里有两条命中直接升级到带审计的跳板比后续再补要省事得多。这套资源包的设计思路就是在不引入数据库和 Web 前端的前提下用脚本 配置文件逼近完整堡垒机的大部分功能。2.2 网络规划管理网段、白名单与默认拒绝部署跳板之前必须先把网络拓扑画清楚。常见做法是划一个独立的管理网段所有目标机器的 22 端口只对跳板机所在的网段开放。如果云平台支持安全组就在安全组层面做两层限制第一层只允许跳板机 IP 访问目标机器的 22 端口第二层在目标机器本地防火墙再放行一次。两层都做的好处是即使某台目标机器的安全组配置被误改本地防火墙还有兜底。资源包里的conf/jump_table.conf模板提供了一个可行的默认策略思路——目标机器列表按别名 用户IP:端口格式排列服务端脚本读取这个文件后动态生成可跳转的目标清单。配置模板里的默认值只放行了内网网段10.0.0.0/8和172.16.0.0/12建议在初始化时把这个范围缩到实际管理需要的最小子网。经验是宁可后续加白名单也不要一开始就放开一个大段。2.3 资源包目录结构与初始化前检查清单解压jump server-v2.1.0.rar后会看到几个核心文件这里按用途列一下文件/目录用途init_jump.sh服务端初始化脚本负责生成主机密钥、创建 jump 用户、配置 SSH 守护进程conf/jump_table.conf目标机器跳转清单每行一条记录conf/sshd_banner登录提示文件可写审计警告语keys/服务端和各目标机器的公钥存放目录tools/check_tunnel.sh隧道连通性检测脚本排障时用docs/部署与使用说明文档初始化前检查三件事跳板机系统是否为 Ubuntu 20.04 或 CentOS 7脚本依赖 systemd跳板机公网 IP 是否已经绑定目标机器是否都支持 SSH key 登录。这三项里任何一项不满足后面都会卡住。检查完就可以执行初始化了但先别急下一步把核心配置理解透再动手。3. 部署与接入实操从解压 rar 到完成第一台设备接入3.1 初始化服务端脚本执行前的参数预检部署的第一步是解压资源包并执行初始化脚本。实际操作时我一般先把整个目录上传到跳板机的/opt/下然后逐项确认目录权限。注意不要直接用 root 跑初始化脚本里预设了JUMP_USER变量默认值是jump建议先创建这个系统用户再以该用户身份操作。# 上传资源包后在目标服务器上执行 mkdir -p /opt/jump tar xf jump_server-v2.1.0.rar -C /opt/jump cd /opt/jump # 检查是否以普通用户执行拒绝 root if [ $(id -u) -eq 0 ]; then echo 请不要用 root 执行; exit 1; fi # 备份原 sshd_config然后由脚本生成跳板专用配置 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date %F) sudo bash init_jump.sh这段代码里有三个关键动作。第一行把 rar 解压到/opt/jump不用默认的/root目录为的是让普通用户jump有完整的读取权限。第三个命令执行了备份这一步能省后面很多麻烦SSH 配置写错了还能退回去。init_jump.sh这个脚本会自动生成新的 Ed25519 主机密钥并配置sshd的AllowUsers指令只允许jump用户从 SSH 登录。脚本执行完成后服务端会打印一行随机生成的端口号默认是22022。这里建议保留非默认端口不是为了隐蔽而是为了减少自动化扫描工具对 22 端口的暴力尝试降低日志噪音。执行完脚本后需要手动重启一次 SSH 服务让配置生效命令是sudo systemctl restart sshd重启后记得新开一个终端窗口测试跳板机本身还能不能登录防止配置错误把自己锁在外面。3.2 配置跳转清单三种格式与通配符规则跳转清单是这套资源包的核心配置文件位于conf/jump_table.conf。它决定了用户通过跳板机可以访问哪些目标机器。配置格式有三种分别对应不同的场景。# 格式一别名 用户目标IP:端口 —— 最常用 web-prod deploy10.20.30.40:22 db-stage backup10.20.30.41:22 # 格式二支持主机名解析 mysql-master admindb.internal:3306 # 格式三带注释行和分组标记# 开头为注释 # [production group] app-01 root10.20.30.42:22配置完成后需要执行一次重载指令让服务端脚本重新读取跳转表。资源包里的reload_jump.sh脚本会重建内部映射文件。这里有一个关键点格式二的场景中3306端口能否连通取决于跳板机到目标机器的网络策略如果目标数据库只允许应用服务器访问那么跳板机也连不通——先确认网络策略再配置清单可以少踩一个坑。通配符规则上这套资源支持简单的 IP 段匹配。如果目标机器数量很大可以在清单里写一个网段作为兜底但我会明确建议不要在生产环境这么做。跳板机的价值就是入口收敛和策略可查一旦用了网段通配审计日志就只能看到谁跳进了某个网段无法精确到单台机器。3.3 目标机器接入下发公钥与最小化授权目标机器接入跳板的核心操作是把跳板机的公钥加入目标机器的authorized_keys文件。资源包提供了批量下发脚本但它的逻辑是逐个执行的不会并发避免打爆目标机器的 SSH 连接数。# 在跳板机上执行三个参数目标IP、目标用户、目标端口 ./tools/deploy_key.sh 10.20.30.40 deploy 22 # 脚本内部的核心动作其实只有一行简化示意 ssh-copy-id -i keys/jump_server_ed25519.pub -p 22 deploy10.20.30.40deploy_key.sh这个脚本内部会先检查目标机器的是否开启密码登录PasswordAuthentication如果关闭会报提示要求手动先行开启。稳妥的顺序是先手动开启密码登录完成 key 下发再在目标机器上关闭密码登录。这条顺序如果反过来很容易造成密钥没下发成功就断开了密码登录通道届时只能通过云控制台的 VNC 去救援非常麻烦。目标机器上的用户建议做到一机一用户不要统一用 root。比如管理 Web 服务器就创建deploy用户管理数据库就创建backup用户每个用户只赋予必要的权限。这样后续审计时看到deployweb-prod就能立刻知道操作者意图。资源包文档中提供了一个模板conf/sudoers.d/jump_user可以控制在目标机器上使用 sudo 的具体命令范围例如只允许执行systemctl restart nginx和tail -f /var/log/nginx/error.log其余命令都被拒绝。4. 避坑清单SSH 隧道、防火墙与账号体系里最常见的五个坑4.1 坑一连接跳板后无法继续跳转到目标机器现象是用户能正常登录跳板但执行ssh deploy10.20.30.40时卡住最终提示Permission denied。排查后会发现原因多半是跳板机的sshd_config开启了AllowTcpForwarding no虽然这是出于安全的考虑但它同时禁用了通过跳板机转发到其他机器的能力。解决办法是在跳板机的 SSH 配置中启用 TCP 转发但不启用网关端口转发GatewayPorts no这样既可以继续跳跃连接又不会让跳板变成端口暴露的中转站。4.2 坑二SSH key 权限报错导致公钥认证静默失败现象是deploy_key.sh执行成功公钥也写进了目标机器的authorized_keys但登录时依然要求输入密码。原因很隐蔽目标机器上~/.ssh目录或authorized_keys文件的权限过宽。SSH 服务端要求authorized_keys文件的 Unix 权限不能超过600目录不能超过700。如果用了scp直接覆盖或者文件被编辑器改写导致权限变化就会触发服务端拒绝使用该文件进行认证。标准修复方式是登录目标机器执行chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh然后重新连接测试。4.3 坑三跳板机服务重启后端口未监听现象是服务端重启后systemctl status sshd显示正常但外部连接跳板机的自定义端口失败。原因可能是init_jump.sh修改的端口没有持久化到sshd_config或者 SELinux 上下文阻止了非标准端口的监听。排查步骤先看ss -tlnp | grep 22022是否监听再看sudo semanage port -l | grep 22022确认 SELinux 策略里放行了该端口。对于 SELinux 的场景执行sudo semanage port -a -t ssh_port_t -p tcp 22022即可放行。资源包文档中没有提到 SELinux 适配如果你用的是 CentOS 或 Rocky Linux这一步是必须做的。4.4 坑四跳板机上配置了密钥登录但脚本重载后 SSH 登录变慢现象是跳转清单重载后每次 SSH 连接跳板机都要等几十秒才提示输入密码或者直接进入会话。原因指向 GSSAPIAuthentication 和 DNS 反向解析。当跳板机配置了 GSSAPI 认证时SSH 客户端会尝试进行 Kerberos 认证交互而跳板机的 DNS 解析如果超时SSH 登录过程就会被拖慢。解决方式是在服务端配置里关闭 GSS 认证GSSAPIAuthentication no并启用UseDNS no。这两个参数的修改对安全性没有实际影响因为跳板机的认证已经收敛到密钥体系不再依赖外部 DNS 和 Kerberos 域控。4.5 坑五客户端 SSH Agent 转发失效导致从跳板跳转目标机器时还需要重复输入密钥现象是本地配置了ssh-agent也添加了私钥通过跳板机访问目标机器时却提示输入密码。原因在于 SSH 的 Agent 转发需要在跳板机的sshd_config中显式开启AllowAgentForwarding yes并且客户端连接跳板时需要带-A参数。这两项缺一不可。有很多人只在客户端加了-A跳板机服务端没开结果一样转不过去。另一方面从安全角度看Agent 转发会把自己的私钥代理暴露给跳板机如果跳板机被入侵私钥可能被滥用。建议只在信任的跳板机上开并且使用ssh-add -c给密钥加确认提示每次转发使用前都需要本地确认降低泄露风险。5. 权限与审计把跳板机从能连变成可追溯5.1 用户账号生命周期创建、禁用与删除跳板机的账号体系是整个运维安全的地基。v2.1.0 资源包提供了一个manage_user.sh脚本支持三个子命令add、disable、delete。这个脚本操作的是系统账号以及跳板机内部的授权映射。# 创建一个新的跳板用户并限制其只能访问指定目标 sudo ./manage_user.sh add zhangsan --allow web-prod,db-stage # 临时禁用账号不删除数据 sudo ./manage_user.sh disable zhangsan # 彻底删除账号 sudo ./manage_user.sh delete zhangsan创建用户时脚本会生成一段随机的初始密码并要求传入--allow参数指定允许跳转的目标别名。这个设计的核心逻辑是把授权收敛到跳板机这一层而不是依赖目标机器上的账号管理。员工离职时只需要在跳板机执行disable就能立刻阻断所有后续连接。禁用操作实际上是把用户的登录 shell 替换为/usr/sbin/nologin同时更新sshd_config中的DenyUsers列表。这个方式的优点是不影响目标机器上的密钥关系后续重新启用只需要改回 shell 即可。另外提醒一句账号管理脚本执行后需要运行reload_jump.sh因为跳板机的认证脚本会在每次 SSH 登录时读取最新配置。5.2 审计日志连接时间、来源 IP 与命令记录跳板机如果只做跳转不记录操作那它跟普通中转机没有本质区别。资源包自带了一个轻量审计方案不依赖额外的数据库直接把 SSH 会话日志记录到系统日志文件中。# 查看今天所有的跳转记录 journalctl -u sshd --since today | grep Accepted publickey # 记录用户在目标机器上执行过的命令需在目标机上开启 echo export PROMPT_COMMANDhistory -a; logger -p auth.info -t cmd_log \$(whoami)$(hostname): $(history 1 | { read x cmd; echo $cmd; })\ \ /etc/profile.d/audit_cmd.sh第一行命令查询的是跳板机的 SSHD 认证日志可以看到谁在什么时间用哪个 IP 登录了跳板机。第二行是给目标机器加上命令日志记录每次执行命令都会通过logger写到目标机器的系统日志里。这套组合在真实排障中非常实用某天线上配置被动过先从跳板机找到谁在什么时间段跳进了目标机器再翻目标机的命令日志定位到具体执行了什么操作。资源包自带的tools/check_tunnel.sh脚本可以验证从跳板机到目标机器的所有隧道连通性输出一个表格附带响应耗时。审计和连通性检查这两块做完跳板机在使用层面已经具备可追溯性但还有一个细节容易被忽略——跳板机自身的 SSH 端口是否也纳入了主机的监控体系。5.3 权限最小化跳板机自身的 root 权限约束很多人在做完上面两步后就开始投入使用了但最后少做的一步是把跳板机自身的权限做约束。跳板机因为掌握了所有目标机器的跳转凭证它的安全性比普通业务机更重要。实际中我会给跳板机单独设置一条访问控制策略只允许公司办公网的两个固定出口 IP 访问跳板机的 SSH 端口其余来源一律拒绝。这可以在跳板机的云安全组或本机防火墙实现。同时跳板机系统上不要存放完整的私钥文件副本。资源包里的keys/目录默认存放的是公钥私钥文件不落盘——初始化脚本生成密钥对后私钥只保留在内存中用于后续的部署操作部署结束后立即销毁。这个设计细节很关键避免跳板机被攻破后私钥直接被提走。实际操作中我也会在完成所有 key 下发后重新生成一次跳板机自身的密钥对防止安装期间密钥被读取。6. 进阶技巧用别名与本地代理让日常跳转更顺手6.1 本地 SSH 配置的三种写法资源包配置好之后日常使用可以从客户端做一层优化让跳板机和目标机器的连接体验更接近直连。核心是使用 SSH 的ProxyJump配置。在本地~/.ssh/config里添加以下内容Host jump HostName 203.0.113.10 Port 22022 User jump IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 30 ServerAliveCountMax 3 Host web-prod HostName 10.20.30.40 User deploy ProxyJump jump IdentityFile ~/.ssh/id_ed25519配置完成后本地直接执行ssh web-prod就会自动先连跳板机再跳转到目标机器。ServerAliveInterval 30的作用是每 30 秒发送一次心跳包保持连接避免较长闲置时间后被防火墙断开。ServerAliveCountMax 3表示连续 3 次心跳没有响应才判定连接失效这两个参数调好后日常维护时的断线率会明显下降。如果习惯用图形工具只需要在工具的 SSH 隧道设置中把代理主机填成跳板机的地址和端口即可原理相同。v2.1.0 资源包中的docs/目录里包含了五种常见客户端的配置示例覆盖面足够日常使用。6.2 复用连接让连续操作不再反复握手频繁跳转容易遇到一个问题每执行一条命令都要经历一次完整的 SSH 握手和认证操作体验被拖慢。通过 SSH 连接复用可以优化这个体验——建立一次连接后后续的跳转都复用这条隧道。在本地 SSH 配置中加上复用参数Host jump ControlMaster auto ControlPath ~/.ssh/controlmux/%r%h:%p ControlPersist 10m Host *.internal ControlMaster auto ControlPath ~/.ssh/controlmux/%r%h:%p ControlPersist 10mControlMaster auto让 SSH 自动管理复用通道ControlPath指定了复用 socket 存放位置。首次连接时建立主连接后续的连接都走既有隧道认证环节被略过。ControlPersist 10m的含义是即使最后一个会话退出主连接在后台保留 10 分钟方便快速重连。这个技巧在连续维护多台机器时效果非常明显尤其适合那种查完一台立刻查下一台的排障节奏。6.3 端口转发的场景化用法与资源包的边界跳板机最常见的进阶用法是本地端口转发。假设目标机器上的某个管理后台只监听了内网端口我们可以在本地通过跳板机把服务映射出来ssh -N -L 8080:10.20.30.40:8080 jump执行后本地浏览器访问http://localhost:8080就会通过跳板机转发到目标机器的内网服务。-N表示不执行远程命令只做转发-L负责本地端口映射。这个功能的便利性很高但也提醒一下这等同把部分内网服务暴露到本地环境用完记得关闭对应会话。如果映射了敏感服务建议配合一次性 session 使用结束会话后转发立刻失效。最后把这套资源的边界说清楚它是一个轻量级跳板方案适合需要快速收敛入口并对操作留痕的运维场景但不具备 Web 门户、工单审批、动态口令等重型堡垒机能力。如果你所在环境有合规审计要求且设备量级很大可能还是需要上完整的堡垒机系统。作为个人和小团队的入口管理方案这份资源的性价比已经非常高。记得一件事每次修改跳板配置后都强制自己走一遍reload_jump.shcheck_tunnel.sh 一次真实跳转测试这套验证三步做下来配置变更的翻车概率会低很多。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站