# Jumpserver
:一个 Web 服务器,提供了跳板机、堡垒机的功能,简称为 JMS 。
- 官方文档 (opens new window)
- 由中国的飞致云公司开源,基于 Python 的 Django 框架开发,于 2018 年发布 1.0 版本。
# 原理
Jumpserver 需要部署多个组件:
- Core :核心组件,通过 Restful API 与其它模块交互。
- Coco :一个 SSH 客户端,采用 Python 语言开发。目前已被 Koko 替换。
- Koko :一个 SSH 客户端,采用 Golang 语言开发。
- Guacamole :一个无客户端的远程桌面网关,由 Apache 开源。JMS 调用它来实现 RDP 功能。
- Luna :用于渲染、输出前端文件。
- Nginx :用于反向代理 Luna 。
- MySQL
- Redis
- Celery
Jumpserver 可以托管多种资产:
- Linux 主机
- 用户可以通过浏览器登录 Jumpserver ,然后连接到某个 Linux 主机,这会打开一个 WebSSH 窗口。
- 用户也可以通过 SSH 客户端登录 Jumpserver ,然后连接到某个 Linux 主机,这会打开一个普通 SSH 终端。
- 支持 Ctrl+C 复制、Ctrl+V 粘贴等快捷键。
- 支持上传、下载文件。
- Jumpserver 内置了 Ansible ,可以批量管理 Linux 主机,批量执行命令。
- Windows 主机
- 用户可以通过浏览器登录 Jumpserver ,然后连接到某个 Windows 主机,这会在 Web 网页中显示 Windows 图形桌面。
- MySQL、MongoDB、Redis 等数据库
- Jumpserver 提供了多种数据库客户端,比如 SQL 终端、DBeaver 。
- Web 网站
- 用户可以将某个 Web 网站的网址、登录密码,配置在 Jumpserver 中。然后通过 Jumpserver 访问该网站,它会自动填写密码。
- Linux 主机
# 优点
- 便于批量管理主机的登录权限。
- 避免将主机的登录密码直接告诉用户。
- 用户可以通过跳板机访问一些内网主机,这些主机通常不能从公网访问。
- 提供了命令过滤、操作记录等功能,安全程度高。
# 缺点
- 存在单点故障的风险。JMS 挂掉时用户就不可以访问所有托管主机,JMS 被入侵时所有托管主机都有安全风险。
- 可以分布式部署多实例,进行负载均衡,实现高可用。
- 与 SecureCRT 等专用的 SSH 客户端相比,功能较少。
# 部署
- 官方提供了 部署脚本 (opens new window) ,基于 docker-compose 部署 Jumpserver 的所有组件。
- 默认账号、密码为 admin、admin 。
- 默认监听 HTTP 端口。如果想监听 HTTPS 端口,则参考官方文档 https://docs.jumpserver.org/zh/v3/installation/proxy/ (opens new window) ,修改 jms_web 容器中的 nginx 配置文件。
# 用法
管理页面示例:
- 用户管理
- :用于管理 JMS 网站本身的用户。用户登录 JMS 之后,才可以跳转登录一些服务器。
- 资产管理
- 资产列表:用于添加一些服务器作为资产,可以按树形结构分组。
- 网域列表:用于添加 SSH 代理,使得 JMS 可以连接到某个网络的服务器。
- 管理用户:指 JMS 通过 Ansible 批量登录服务器时采用的用户,获取硬件信息,还可以推送创建系统用户。
- 系统用户:指通过 Web 终端登录服务器时采用的用户。
- 权限管理
- :用于控制 JMS 用户对哪些资产拥有访问权限。
- 例如:
- 先添加一些服务器资产,分组节点为 "测试环境" 。并创建相应的管理用户、系统用户,都名为 "测试环境-管理员" 。
- 再创建一个名为 "测试环境-管理员" 的授权规则,将上述服务器的系统用户分配给某些 JMS 用户。
- 当 JMS 用户登录某个服务器时,如果有多个系统用户可用,则默认采用优先级最高的那个。如果优先级相同,则会弹出一个对话框供选择。
- 会话管理
- :用于管理用户打开的 Web 终端,支持终断、实时监控、回放。
- 会实时监控用户输入的每个字符,包括 Enter、Backspace、Ctrl+C 。
- 执行命令之后的终端输出,也会被监控。
- 命令记录
- :用于记录用户在 Web 终端执行过的命令。
- 不适合实时监控,存在一条命令的滞后。
- 只会记录用户执行过的命令,不会记录用户输入的 Enter、Backspace、Ctrl+C 。
- 记录命令的终端输出时,最多记录十几行。
Web 终端示例: