Jumpserver堡垒机

2838 字
14 分钟
Jumpserver堡垒机

Jumpserver堡垒机#

[TOC]


概述#

🦄为什么要用跳板机/堡垒机?

  • 假如 运维和用户 走的同一个入口
    • 安全性问题 - 如果直接开放SSH服务给所有人,容易被暴力破解
    • 流量太高时, 或者遇到攻击行为, 我们无法远程登录我们的服务器

🦄跳板机:初级版”门卫”

==作用==:

  • 作为统一入口,避免服务器直接暴露
  • 用户必须先登录跳板机,再访问其他服务器
  • 基本的日志记录功能

==局限性==

  • 只能记录谁登录了,不能详细记录具体操作

🦄堡垒机:高级版”智能安保中心”

堡垒机就像是升级版的门禁系统,不仅有前台(跳板机),还有:

  • 指纹识别系统(强身份认证)
  • 每个房间都有监控摄像头(操作审计)
  • 每个人只能进自己权限范围的房间(权限控制)
  • 异常行为自动报警(安全防护)

环境准备#

JumpServer 文档

  • ==文档📄参考==👆
Terminal window
'堡垒机搭建'
# 这里我用Rocky10--->IP地址: 10.0.0.99
4Core/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.0K
drwxr-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]# ll
total 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.sh
drwxr-xr-x 2 root root 4096 Apr 17 2025 compose
-rw-r--r-- 1 root root 6423 Apr 17 2025 config-example.txt
drwxr-xr-x 7 root root 89 Apr 17 2025 config_init
-rwxr-xr-x 1 root root 5967 Apr 17 2025 jmsctl.sh
drwxr-xr-x 5 root root 44 Apr 17 2025 locale
-rw-r--r-- 1 root root 1900 Apr 17 2025 quick_start.sh
drwxr-xr-x 4 root root 4096 Apr 17 2025 scripts
-rw-r--r-- 1 root root 25 Apr 17 2025 static.env
drwxr-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
'用户&&密码'

image-20260407104146084
image-20260407104146084

  • 修改后的密码: oldboy123.com

image-20260407104242112
image-20260407104242112

用户管理#

image-20260407112436991
image-20260407112436991

1️⃣ 张三(普通用户)

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

image-20260408144255313
image-20260408144255313

image-20260408131317731
image-20260408131317731


2️⃣ root(系统管理员)

  • ✅ 是谁? Linux 的 root 用户

    • 同时也是 ansible 的特权用户—> 管理后端服务器

    • ==因为ansible的执行命令必须要用root==

Terminal window
[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_config
IdentityFile ~/.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-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDJthPj/ZFD2ckcIv4Gxzrq6nK+8cfesqy4Nql1wn0vcQAAAJgikjY7IpI2
OwAAAAtzc2gtZWQyNTUxOQAAACDJthPj/ZFD2ckcIv4Gxzrq6nK+8cfesqy4Nql1wn0vcQ
AAAEDOO+fiHFjI2TMiVp46ukjRAopyD1u8ClV98/E9/Z/3ism2E+P9kUPZyRwi/gbHOurq
cr7xx96yrLg2qXXCfS9xAAAAD3Jvb3RASnVtcHNlcnZlcgECAwQFBg==
-----END OPENSSH PRIVATE KEY-----

image-20260408144629522
image-20260408144629522

Linux 的 root 用户

  • 是操作==系统层面==的超级用户
  • 作用:
    • 安装/升级 JumpServer
    • 修改系统配置(如防火墙、SSH 配置)
    • 管理磁盘、内存、进程等底层资源
    • 可以删除整个 JumpServer 数据库!

JumpServer 的 admin 用户

  • 是 ==JumpServer 应用==(Django Web 系统)内置的超级管理员账号
    • 存在于 JumpServer 数据库中
    • 它只是个普通数据库记录
  • 通过 Web 页面登录→ 输入 admin / 默认密码
  • 作用:
    • 创建其他用户(张三、李四)
      • ==同样存在于数据库中==
    • 添加资产(172.16.1.7 等服务器)
    • 配置权限规则、用户组
    • 查看操作审计录像
    • 但不能直接执行 rm -rf / 或修改 /etc/ssh/sshd_config
Terminal window
[物理服务器]
├─ Linux =系统层=
├─ 用户:root(操作系统超级用户)
└─ 用户:jiu、dev 等(普通系统用户)
└─ =应用层=(Docker/虚拟环境)
└─ JumpServer 应用
├─ 数据库:存储用户(admin, 张三)、资产、权限等
└─ Web 服务:admin 用户登录后看到的界面

3️⃣ jiu(资产登录用户)

  • ✅ 是谁? 一个在后端服务器上真实存在的普通用户(不是 root!)
    • 需要 ==Ansible== 提前创建 ---> jiu 用户
  • 🔑 登录方式: 不对外暴露! 张三无法直接 SSH jiu@172.16.1.7
    • 只有 JumpServer 才能用它去连接后端服务器
  • 🎯 作用:
    • 所有张三的操作,实际是以 jiu 身份执行的 (但 JumpServer 会记录“是张三操作的”)

资产管理#

image-20260408132059456
image-20260408132059456

image-20260408132413773
image-20260408132413773

image-20260408140026151
image-20260408140026151

  • ==免密的重要性==
Terminal window
[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的公钥
'把它删了之后!'

image-20260408135609531
image-20260408135609531

image-20260408140427807
image-20260408140427807

Terminal window
[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 系统用户)
├── 免密测试 && 收集资产信息

资产授权#

  1. 资产直接授权给用户❌

    1. 这个用户是 ---> 数据库用户(张三,李四)
    2. 太繁琐了
  2. 资产先授权给组 + 用户进组✅

Terminal window
运维组 web01 && web02 -> 以jiu身份运行(在后台web中创建)
开发组 web01 -> 以dev身份运行(同上)(由ansible创建)(系统用户)
用户管理:
├─ 张三 加入运维组(ops_team)
├─ 李四 加入开发组(dev_team)

image-20260408143537568
image-20260408143537568


web01 && web02 中需要有系统用户

所有 张三和李四 的操作,实际是以服务器中的 ==系统用户== 执行的

  • 后台 web服务器 的普通用户
    • 由 ==ansible== 自动创建

image-20260408150232861
image-20260408150232861

image-20260408151503577
image-20260408151503577

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

image-20260408152623972
image-20260408152623972


image-20260408153703146
image-20260408153703146

image-20260408153900797
image-20260408153900797

image-20260408155307106
image-20260408155307106

image-20260408155324361
image-20260408155324361

Terminal window
[root@web01 ~]#id jiu
uid=1001(jiu) gid=1001(jiu) groups=1001(jiu)
[root@web01 ~]#id dev
uid=1002(dev) gid=1002(dev) groups=1002(dev)
'在web01中这两个用户已经创建出来了'
[root@web02 ~]#tail -2 /etc/passwd
www❌888:888::/home/www:/sbin/nologin
jiu❌1001:1001::/home/jiu:/bin/bash
'web02只有jiu这个系统用户用户'

测试登录#

  • ==新开浏览器== —> 登录张三

image-20260408160135724
image-20260408160135724

image-20260408160405885
image-20260408160405885

image-20260408160613379
image-20260408160613379

image-20260408160711707
image-20260408160711707

image-20260408160911641
image-20260408160911641

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

image-20260408163015121
image-20260408163015121

审计台#

image-20260408161603368
image-20260408161603368

访问控制#

image-20260408165022259
image-20260408165022259

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

image-20260408165426490
image-20260408165426490

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

image-20260409002957377
image-20260409002957377

数据库#

image-20260408185339677
image-20260408185339677

  • 先添加数据库的资产

  • 可以不做 免密登录

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

image-20260408185624215
image-20260408185624215


  • 上面是数据库资产的添加

  • 数据库也要有一个可以远程连接的系统用户

    • jiuzhao —> 提前在创建好了的
    • 上面添加资产时, 用的也是它

image-20260408190557676
image-20260408190557676


  • 数据库资产授权

image-20260408190828344
image-20260408190828344


  • ==测试验证==

image-20260408191004032
image-20260408191004032

image-20260408191144706
image-20260408191144706

网域列表#

image-20260408203448214
image-20260408203448214

image-20260408202205563
image-20260408202205563

  • 简单理解就是 ==JumpServer== 用一台 公网的云服务器 管理 私网 的云服务器
    • 中间这台云服务可以和两边进行通信
Terminal window
# 47.120.74.87 (公网)
[root@gateway ~]# hostname -I
172.18.215.155
[root@gateway ~]# ping 172.18.215.156
# 模拟局域网--->私网服务器!
[root@gateway ~]# ssh root@172.18.215.156
[root@iZf8zfr4wvlrfbrafys1e7Z ~]# hostname -I
172.18.215.156
[root@iZf8zfr4wvlrfbrafys1e7Z ~]# hostnamectl set-hostname ali-web
[root@iZf8zfr4wvlrfbrafys1e7Z ~]# hostname
ali-web
[root@iZf8zfr4wvlrfbrafys1e7Z ~]# exit
logout
Connection 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.87
Last login: Wed Apr 8 20:36:18 2026 from 115.26.4.225
Welcome to Alibaba Cloud Elastic Compute Service !
[root@gateway ~]# exit
logout
Connection 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.156
Last login: Wed Apr 8 20:38:37 2026 from 172.18.215.155
Welcome to Alibaba Cloud Elastic Compute Service !
[root@ali-web ~]# hostname
ali-web
[root@ali-web ~]# exit
logout
Connection to 172.18.215.156 closed.
[root@gateway ~]# hostname -I
172.18.215.155
===============================
3)添加网域

image-20260408205005581
image-20260408205005581

image-20260408204748525
image-20260408204748525

image-20260408204824967
image-20260408204824967

image-20260408205348397
image-20260408205348397


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

image-20260408210344028
image-20260408210344028

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

image-20260408205846934
image-20260408205846934

image-20260408210637254
image-20260408210637254


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

image-20260408221008603
image-20260408221008603

  • 之前的==授权组==

image-20260408220021704
image-20260408220021704

image-20260408220200252
image-20260408220200252

image-20260408222310423
image-20260408222310423

image-20260408222127403
image-20260408222127403

image-20260408222359184
image-20260408222359184

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

image-20260408221812151
image-20260408221812151

image-20260408222457011
image-20260408222457011

image-20260408222706251
image-20260408222706251

多因子认证#

  • 可以单个用户启用
    • 我们演示这个
  • 也可以整个系统启用

image-20260408230422281
image-20260408230422281


image-20260408230716091
image-20260408230716091


  • 登录 李四 用户

image-20260408231132124
image-20260408231132124

image-20260408231020354
image-20260408231020354

image-20260408231222053
image-20260408231222053

image-20260408231213564
image-20260408231213564

image-20260408231354259
image-20260408231354259

  • ==双层认证==

命令行登录#

Terminal window
✅️这个用的是最多的
# 谁没事用web页面登录呀!
===============================
[root@Jumpserver ~]# ss -lntup
tcp 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]> 1
Connecting to dev-->开发-->权限小-->只能查看(dev)@172.16.1.7 1.1
Last login: Wed Apr 8 18:01:58 2026 from 172.16.1.99
[dev@web01 ~]$whoami
dev

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Jumpserver堡垒机
https://www.kpyun.fun/posts/web/other/jumpserver/
作者
久棹
发布于
2026-01-20
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录