Jumpserver堡垒机
2838 字
14 分钟
Jumpserver堡垒机

Jumpserver堡垒机
[TOC]
概述
🦄为什么要用跳板机/堡垒机?
- 假如
运维和用户走的同一个入口- 安全性问题 - 如果直接开放SSH服务给所有人,容易被暴力破解
- 流量太高时, 或者遇到攻击行为, 我们无法远程登录我们的服务器
🦄跳板机:初级版”门卫”
==作用==:
- 作为统一入口,避免服务器直接暴露
- 用户必须先登录跳板机,再访问其他服务器
- 基本的日志记录功能
==局限性==
- 只能记录谁登录了,不能详细记录具体操作
🦄堡垒机:高级版”智能安保中心”
堡垒机就像是升级版的门禁系统,不仅有前台(跳板机),还有:
- 指纹识别系统(强身份认证)
- 每个房间都有监控摄像头(操作审计)
- 每个人只能进自己权限范围的房间(权限控制)
- 异常行为自动报警(安全防护)
环境准备
- ==文档📄参考==👆
'堡垒机搭建'# 这里我用Rocky10--->IP地址: 10.0.0.994Core/8GB RAM/100G HDD'4核8GB'# 我们这里可以先给小一点,不够再加呗!
[root@Jumpserver ~]# cd /server/tmp/[root@Jumpserver tmp]# rz# 上传进来[root@Jumpserver tmp]# ls -lh | grep jumpserver-rw-r--r-- 1 root root 1.2G Apr 7 09:46 jumpserver-ce-v4.9.0-x86_64.tar.gz[root@Jumpserver tmp]# tar xvf jumpserver-ce-v4.9.0-x86_64.tar.gz -C /soft/# 解压到/soft目录下[root@Jumpserver tmp]# ls -lh /soft/total 4.0Kdrwxr-xr-x 7 root root 4.0K Apr 17 2025 jumpserver-ce-v4.9.0-x86_64[root@Jumpserver tmp]# cd /soft/jumpserver-ce-v4.9.0-x86_64/[root@Jumpserver jumpserver-ce-v4.9.0-x86_64]# lltotal 76-rw-r--r-- 1 root root 35148 Apr 17 2025 LICENSE-rw-r--r-- 1 root root 1642 Apr 17 2025 README.md-rw-r--r-- 1 root root 2029 Apr 17 2025 cn-quick_start.shdrwxr-xr-x 2 root root 4096 Apr 17 2025 compose-rw-r--r-- 1 root root 6423 Apr 17 2025 config-example.txtdrwxr-xr-x 7 root root 89 Apr 17 2025 config_init-rwxr-xr-x 1 root root 5967 Apr 17 2025 jmsctl.shdrwxr-xr-x 5 root root 44 Apr 17 2025 locale-rw-r--r-- 1 root root 1900 Apr 17 2025 quick_start.shdrwxr-xr-x 4 root root 4096 Apr 17 2025 scripts-rw-r--r-- 1 root root 25 Apr 17 2025 static.envdrwxr-xr-x 2 root root 41 Apr 17 2025 utils===============================================[root@Jumpserver jumpserver-ce-v4.9.0-x86_64]# ./jmsctl.sh install# ✅️安装./jmsctl.sh uninstall # 卸载./jmsctl.sh start ✅️启动./jmsctl.sh stop ✅️停止./jmsctl.sh status ✅️查看状态# 底层跑的都是容器!./jmsctl.sh restart ✅️重启./jmsctl.sh -h ✅️帮助[root@Jumpserver jumpserver-ce-v4.9.0-x86_64]# ./jmsctl.sh start[+] Running 8/8 ✔ Container jms_celery Started ✔ Container jms_redis Running ✔ Container jms_koko Started ✔ Container jms_lion Started ✔ Container jms_chen Started ✔ Container jms_web Started ✔ Container jms_postgresql Running ✔ Container jms_core Started
http://10.0.0.99:80 ✅️网址Default username: admin Default password: ChangeMe'用户&&密码'
- 修改后的密码:
oldboy123.com

用户管理

1️⃣ 张三(普通用户)
- ✅ 是谁?
就是你自己,一个普通运维或开发人员,用真名注册(比如“张三”、“老王”)
- 通过网页登录 ==JumpServer==
- ==存在于数据库中==
- 🔑 登录方式:
- → 访问
http://jumpserver.xxx - → 输入账号密码(张三)
- → 进入 Web 控制台
- → 访问
- 🎯 能做什么?
在 JumpServer 页面上,选择他被授权的服务器(比如 172.16.1.7)
然后点“登录”——这时 JumpServer 会代他用另一个用户(比如
jiu)去 SSH 登录目标服务器 - ❗重点: 张三自己 never 直接 SSH 到后端服务器! 他只在 JumpServer 界面操作,所有行为都被记录、录像、审计


2️⃣ root(系统管理员)
-
✅ 是谁? Linux 的
root用户-
同时也是 ansible 的特权用户—> 管理后端服务器
-
==因为ansible的执行命令必须要用root==
-
[root@Jumpserver ~]# ssh-keygen -t ed25519 -f ~/.ssh/my_key -N ''# 生成密钥对.....The key's randomart image is:'+--[ED25519 256]--+| || . || = .|| . o = + || S . * E O|| . B + * /+|| + = o *.=|| . =oo *o|| .++ =**|+----[SHA256]-----+[root@Jumpserver ~]# vim /etc/ssh/ssh_configIdentityFile ~/.ssh/my_key# 默认使用这个私钥进行免密连接===================================[root@Jumpserver ~]# ssh-copy-id -i ~/.ssh/my_key.pub 172.16.1.7'把公钥拷贝给后端web服务器-->root用户'# 我们需要用后台web的root权限# ansible连接后端web服务器,从而在后台web创建用户'不仅创建用户,给用户sudo提权也需要root权限(后端web的root)'[root@Jumpserver .ssh]# ssh-copy-id -i ~/.ssh/my_key.pub 172.16.1.8'web01 && web02'🏗️Ansible 免密登录 = JumpServer 主机(root)生成密钥对 → 把公钥放到后端服务器的 root 用户家目录 → 私钥交给 JumpServer 应用(通过“特权用户”配置)→ Ansible 调用时自动用私钥免密登录 root@目标IP'只有root用户我们才能随心所欲的操作后台web'===================================[root@Jumpserver ~]# cat ~/.ssh/my_key# 查看私钥,后面需要上传至JumpServer中-----BEGIN OPENSSH PRIVATE KEY-----b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZWQyNTUxOQAAACDJthPj/ZFD2ckcIv4Gxzrq6nK+8cfesqy4Nql1wn0vcQAAAJgikjY7IpI2OwAAAAtzc2gtZWQyNTUxOQAAACDJthPj/ZFD2ckcIv4Gxzrq6nK+8cfesqy4Nql1wn0vcQAAAEDOO+fiHFjI2TMiVp46ukjRAopyD1u8ClV98/E9/Z/3ism2E+P9kUPZyRwi/gbHOurqcr7xx96yrLg2qXXCfS9xAAAAD3Jvb3RASnVtcHNlcnZlcgECAwQFBg==-----END OPENSSH PRIVATE KEY-----
Linux 的 root 用户
- 是操作==系统层面==的超级用户
- 作用:
- 安装/升级 JumpServer
- 修改系统配置(如防火墙、SSH 配置)
- 管理磁盘、内存、进程等底层资源
- 可以删除整个 JumpServer 数据库!
JumpServer 的 admin 用户
- 是 ==JumpServer 应用==(Django Web 系统)内置的超级管理员账号
- 存在于 JumpServer 数据库中
- 它只是个普通数据库记录
- 通过 Web 页面登录→ 输入
admin/ 默认密码 - 作用:
- 创建其他用户(张三、李四)
- ==同样存在于数据库中==
- 添加资产(172.16.1.7 等服务器)
- 配置权限规则、用户组
- 查看操作审计录像
- 但不能直接执行
rm -rf /或修改/etc/ssh/sshd_config
- 创建其他用户(张三、李四)
[物理服务器] │ ├─ Linux =系统层= │ ├─ 用户:root(操作系统超级用户) │ └─ 用户:jiu、dev 等(普通系统用户) │ └─ =应用层=(Docker/虚拟环境) └─ JumpServer 应用 ├─ 数据库:存储用户(admin, 张三)、资产、权限等 └─ Web 服务:admin 用户登录后看到的界面3️⃣ jiu(资产登录用户)
- ✅ 是谁?
一个在后端服务器上真实存在的普通用户(不是 root!)
- 需要 ==Ansible== 提前创建 --->
jiu用户
- 需要 ==Ansible== 提前创建 --->
- 🔑 登录方式:
不对外暴露! 张三无法直接 SSH
jiu@172.16.1.7- 只有 JumpServer 才能用它去连接后端服务器
- 🎯 作用:
- 所有张三的操作,实际是以
jiu身份执行的 (但 JumpServer 会记录“是张三操作的”)
- 所有张三的操作,实际是以
资产管理



- ==免密的重要性==
[root@web01 ~]#cd ~/.ssh/[root@web01 .ssh]#ll✅️'web01'-rw------- 1 root root 284 Apr 8 12:33 authorized_keys[root@web01 .ssh]#rm -rf authorized_keys# 这个是JumpServer的公钥'把它删了之后!'

[JumpServer 主机(10.0.0.99)] │ ├─ root 用户操作: │ ├─ [Step 1] 生成密钥对 │ │ ├── 私钥:给 Ansible 使用 │ │ └── 公钥:分发给后端服务器 root身份 │ │ │ ├─ [Step 2] 手动分发公钥给后端服务器 root身份 │ ├─ admin 用户操作: │ └─ [Step 3] 配置 JumpServer 应用 │ ├── 登录 JumpServer Web 界面 (admin 用户) │ ├── 账号模版-->创建"特权用户":用户名=root,并上传私钥 │ └── 添加资产并关联"特权用户"-->web01 && web02 │ └─ [Step 4] Ansible 自动化执行 (root 系统用户) ├── 免密测试 && 收集资产信息资产授权
-
资产直接授权给用户❌
- 这个用户是 ---> 数据库用户(张三,李四)
- 太繁琐了
-
资产先授权给组 + 用户进组✅
运维组 → web01 && web02 -> 以jiu身份运行(在后台web中创建)开发组 → web01 -> 以dev身份运行(同上)(由ansible创建)(系统用户)
用户管理:├─ 张三 → 加入运维组(ops_team)├─ 李四 → 加入开发组(dev_team)
web01 && web02 中需要有系统用户
所有 张三和李四 的操作,实际是以服务器中的 ==系统用户== 执行的
- 后台
web服务器的普通用户- 由 ==ansible== 自动创建


- dev 用户同理--->sudo里面能用
cat 或 less…等权限小





[root@web01 ~]#id jiuuid=1001(jiu) gid=1001(jiu) groups=1001(jiu)[root@web01 ~]#id devuid=1002(dev) gid=1002(dev) groups=1002(dev)'在web01中这两个用户已经创建出来了'
[root@web02 ~]#tail -2 /etc/passwdwww❌888:888::/home/www:/sbin/nologinjiu❌1001:1001::/home/jiu:/bin/bash'web02只有jiu这个系统用户用户'测试登录
- ==新开浏览器== —> 登录张三





- 上面是==运维组==的

审计台

访问控制

- 命令rm可能不生效
- 用正则匹配试试
^rm\s+-rf\s+.*

- 刚添加上之后, 对于正在连接的终端来说, 不能立即生效, 重新连接后生效!
-
- 实在不行就重新添加一遍试试!
- 用👆的正则rm
-

数据库

-
先添加数据库的资产
-
可以不做
免密登录- 能直接进入到数据库里面就行
- 这里不是特权用户❌️, 因为它是==数据库==, 测试的是数据库的连通性
- 自然用的是可以远程登录的数据库用户✅️

-
上面是数据库资产的添加
-
数据库也要有一个可以远程连接的系统用户
- jiuzhao —> 提前在创建好了的
- 上面添加资产时, 用的也是它

- 数据库资产授权

- ==测试验证==


网域列表


- 简单理解就是 ==JumpServer== 用一台
公网的云服务器管理私网的云服务器- 中间这台云服务可以和两边进行通信
# 47.120.74.87 (公网)[root@gateway ~]# hostname -I172.18.215.155[root@gateway ~]# ping 172.18.215.156# 模拟局域网--->私网服务器![root@gateway ~]# ssh root@172.18.215.156[root@iZf8zfr4wvlrfbrafys1e7Z ~]# hostname -I172.18.215.156[root@iZf8zfr4wvlrfbrafys1e7Z ~]# hostnamectl set-hostname ali-web[root@iZf8zfr4wvlrfbrafys1e7Z ~]# hostnameali-web[root@iZf8zfr4wvlrfbrafys1e7Z ~]# exitlogoutConnection to 172.18.215.156 closed.[root@gateway ~]#===============================1)JumpServer和gateway做免密连接[root@Jumpserver ~]# ssh-copy-id -i ~/.ssh/my_key.pub 47.120.74.87'公网'[root@Jumpserver ~]# ssh 47.120.74.87Last login: Wed Apr 8 20:36:18 2026 from 115.26.4.225
Welcome to Alibaba Cloud Elastic Compute Service !
[root@gateway ~]# exitlogoutConnection to 47.120.74.87 closed.[root@Jumpserver ~]#===============================2)gateway和ali-web做免密连接[root@gateway ~]# ssh-keygen[root@gateway ~]# ssh-copy-id 172.18.215.156'私网'[root@gateway ~]# ssh 172.18.215.156Last login: Wed Apr 8 20:38:37 2026 from 172.18.215.155
Welcome to Alibaba Cloud Elastic Compute Service ![root@ali-web ~]# hostnameali-web[root@ali-web ~]# exitlogoutConnection to 172.18.215.156 closed.[root@gateway ~]# hostname -I172.18.215.155===============================3)添加网域



- 添加云服务器资产==(局域网私网)==

[root@gateway ~]# cat ~/.ssh/id_rsa-----BEGIN RSA PRIVATE KEY-----MIIEowIBAAKCA'网域的私钥'-----END RSA PRIVATE KEY-----'创建公网云服务器的特权用户'✅️这个特权用户用来管理-->后面私网云服务器✅️

- ==资产授权!==
- 这里没有新建系统用户

- 之前的==授权组==





[root@gateway ~]# ssh 172.18.215.156Last login: Wed Apr 8 22:12:43 2026 from 172.18.215.155'从网关登录到--->内部云服务器'[root@ali-web ~]# id jiuuid=1000(jiu) gid=1000(jiu) groups=1000(jiu)# 这个时候就看到这个用户了


多因子认证
- 可以单个用户启用
- 我们演示这个
- 也可以整个系统启用


- 登录
李四用户





- ==双层认证==
命令行登录
✅️这个用的是最多的# 谁没事用web页面登录呀!===============================[root@Jumpserver ~]# ss -lntuptcp LISTEN 0.0.0.0:2222 users:(("docker-proxy",pid=1878,fd=4))tcp LISTEN [::]:2222 users:(("docker-proxy",pid=1883,fd=4))# 这个2222端口用来命令行登录===============================[C:\~]$ ssh lisi@10.0.0.99 2222# 登录的是李四Connecting to 10.0.0.99:2222...Connection established.'Welcome to JumpServer SSH Server' 李四, JumpServer............ 9) Enter s to language switch. '选择语言' 10) Enter ? to print help. 11) Enter q to exit.Opt> s ID | NAME--------+------ 1 | English 2 | 中文ID> 2切换语言成功 李四, JumpServer
1) 输入 部分IP,主机名,备注 进行搜索登录(如果唯一). 2) 输入 / + IP,主机名,备注 进行搜索,如:/192.168. 3) 输入 p 进行显示您有权限的资产. 4) 输入 g 进行显示您有权限的节点. 5) 输入 h 进行显示您有权限的主机. 6) 输入 d 进行显示您有权限的数据库. 7) 输入 k 进行显示您有权限的Kubernetes. 8) 输入 r 进行刷新最新的机器和节点信息. 9) 输入 s 进行语言切换. 10) 输入 ? 进行显示帮助. 11) 输入 q 进行退出.Opt> h 1 | web01 | 172.16.1.7 | Linux | DEFAULT......[Host]> 1Connecting to dev-->开发-->权限小-->只能查看(dev)@172.16.1.7 1.1Last login: Wed Apr 8 18:01:58 2026 from 172.16.1.99[dev@web01 ~]$whoamidev文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
函数与数组
Shell脚本Shell函数定义与数组操作,涵盖局部/全局变量、递归函数及数组遍历
2
循环与case多分支
Shell脚本Shell循环结构与case多分支语句,涵盖for/while/until循环及实战脚本
3
数值运算与if条件判断
Shell脚本Shell数值运算方法与if条件判断结构,涵盖整数/字符串比较及文件测试
4
Shell编程基础
Shell脚本Shell脚本基础入门,涵盖变量、引号规则、条件测试及脚本调试方法
5
Ansible Docker 动态清单
Ansible自动化讲解Ansible与Docker集成及动态清单机制,涵盖容器化部署与inventory动态管理
随机文章随机推荐



