# Jumpserver

:一个 Web 服务器,提供了跳板机、堡垒机的功能,简称为 JMS 。

# 原理

  • 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 访问该网站,它会自动填写密码。

# 优点

  • 便于批量管理主机的登录权限。
  • 避免将主机的登录密码直接告诉用户。
  • 用户可以通过跳板机访问一些内网主机,这些主机通常不能从公网访问。
  • 提供了命令过滤、操作记录等功能,安全程度高。

# 缺点

  • 存在单点故障的风险。JMS 挂掉时用户就不可以访问所有托管主机,JMS 被入侵时所有托管主机都有安全风险。
    • 可以分布式部署多实例,进行负载均衡,实现高可用。
  • 与 SecureCRT 等专用的 SSH 客户端相比,功能较少。

# 部署

# 用法

管理页面示例:

  • 用户管理
    • :用于管理 JMS 网站本身的用户。用户登录 JMS 之后,才可以跳转登录一些服务器。
  • 资产管理
    • 资产列表:用于添加一些服务器作为资产,可以按树形结构分组。
    • 网域列表:用于添加 SSH 代理,使得 JMS 可以连接到某个网络的服务器。
    • 管理用户:指 JMS 通过 Ansible 批量登录服务器时采用的用户,获取硬件信息,还可以推送创建系统用户。
    • 系统用户:指通过 Web 终端登录服务器时采用的用户。
  • 权限管理
    • :用于控制 JMS 用户对哪些资产拥有访问权限。
    • 例如:
      1. 先添加一些服务器资产,分组节点为 "测试环境" 。并创建相应的管理用户、系统用户,都名为 "测试环境-管理员" 。
      2. 再创建一个名为 "测试环境-管理员" 的授权规则,将上述服务器的系统用户分配给某些 JMS 用户。
      3. 当 JMS 用户登录某个服务器时,如果有多个系统用户可用,则默认采用优先级最高的那个。如果优先级相同,则会弹出一个对话框供选择。
  • 会话管理
    • :用于管理用户打开的 Web 终端,支持终断、实时监控、回放。
    • 会实时监控用户输入的每个字符,包括 Enter、Backspace、Ctrl+C 。
    • 执行命令之后的终端输出,也会被监控。
  • 命令记录
    • :用于记录用户在 Web 终端执行过的命令。
    • 不适合实时监控,存在一条命令的滞后。
    • 只会记录用户执行过的命令,不会记录用户输入的 Enter、Backspace、Ctrl+C 。
    • 记录命令的终端输出时,最多记录十几行。

Web 终端示例: