提升運維效率:輕鬆掌握JumpServer安裝和使用技巧

2023-11-10 09:00:28

前言

JumpServer 是一個開源的跳板機的解決方案,提供了對遠端伺服器的安全存取、對談錄製和審計、使用者身份管理等功能,適用於需要管理機器資源&大量伺服器資源的情況。
本文將分享在 docker 中 JumpServer 的安裝使用經驗,並使用油猴外掛擴充套件其功能

特點

  • 開源免費,安裝使用簡單
  • 檔案完善,成熟檔案
  • 極致的 Web Terminal 使用體驗
  • 支援管理 Linux / Windows / 資料庫 / K8S 叢集 / Web 應用 / Remote App
  • 符合 4A 規範的堡壘機:身份驗證 / Authentication 授權控制 / Authorization 賬號管理 / Accounting 安全審計 / Auditing

使用情況

  • 使用 docker compose 安裝
  • web 終端除了傳檔案沒有 MobaXterm 方便, 但是其顯示和命令記錄以及快捷命令都挺舒服的

實踐

使用 docker compose 安裝 JumpServer

  • 檔案由三部分組成

    • mariadb 資料庫:jms_mysql 映象:mariadb:10.6
    • reids 快取:jms_redis 映象: redis:6.2
    • jumpserver 服務:jms_server映象:jumpserver/jms_all:v3.8.1
  • 開放埠

    • 未開放 mysql 和 redis 的埠,只給 jumpserver 提供服務
    • Jumpserver 開放埠說明:81:80(未設定域名時驗證存取),其他 nginx 使用了 80,通過 nginx 轉發到 http://jms_all:80 即可。
    • 定義可信任的存取 DOMAINS 設定jumpserver.devops.test.com``,192.168.123.214:81
  • 指定 mysql 資料庫賬號密碼:root devops666

  • 指定 redis 密碼:devops666

  • 新增了健康檢查節點

  • 對應服務的掛載目錄

    • ./data-mysql
    • ./data-redis
    • ./data-server
  • 指定網路:devopsnetwork (docker network create devopsnetwork

  • 啟動時會自動建立&初始化資料庫,無需手動初始化

  • 以特權模式執行 jms_server

  • 參考自官方的 allinone 組態檔

version: '3.1'
services:
  jms_mysql:
    image: mariadb:10.6
    container_name: jms_mysql
    restart: always
    environment:
      MARIADB_DATABASE: jumpserver
      MARIADB_ROOT_PASSWORD: devops666
    healthcheck:
      test: "mysql -h 127.0.0.1 -u root -p devops666 -e 'SHOW DATABASES;'"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    volumes:
      - ./data-mysql:/var/lib/mysql
    networks:
      - devopsnetwork

  jms_redis:
    image: redis:6.2
    container_name: jms_redis
    restart: always
    command: redis-server --requirepass devops666
    environment:
      REDIS_PASSWORD: devops666
    healthcheck:
      test: "redis-cli -h 127.0.0.1 -a devops666 info Replication"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    volumes:
      - ./data-redis:/data
    networks:
      - devopsnetwork
      
  jms_server:
    container_name: jms_all
    restart: always
    image: jumpserver/jms_all:v3.8.1
    volumes:
      - ./data-server/core/data:/opt/jumpserver/data # Core 持久化目錄, 儲存錄影紀錄檔
      - ./data-server/koko/data:/opt/koko/data # Koko 持久化目錄
      - ./data-server/lion/data:/opt/lion/data # Lion 持久化目錄
      - ./data-server/magnus/data:/opt/magnus/data # Magnus 持久化目錄
      - ./data-server/kael/data:/opt/kael/data # Kael 持久化目錄
      - ./data-server/chen/data:/opt/chen/data # Chen 持久化目錄
      - ./data-server/web/log:/var/log/nginx # Nginx 紀錄檔持久化目錄
    privileged: true
    environment:
      # 自行生成隨機的字串, 不要包含特殊字串, 長度推薦大於等於 50
      - SECRET_KEY=2FsdGVkX19mzMum9dqqphTCNpm9dqqphTCNpm9dqqphTCNpm9dqqphTCNpm9dqqphTCNpm9dqqphTCNpm9dqqphTCNpCPV
      # 自行生成隨機的字串, 不要包含特殊字串, 長度推薦大於等於 24
      - BOOTSTRAP_TOKEN=m9dqqphTCNpm9dqqphTCNpm9dqqphTCNp 
      # 紀錄檔等級, 測試環境推薦設定為 DEBUG
      - LOG_LEVEL=ERROR
      # redis設定
      - REDIS_HOST=jms_redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=devops666
      # mysql設定
      - DB_HOST=jms_mysql
      - DB_PORT=3306
      - DB_USER=root
      - DB_NAME=jumpserver
      - DB_PASSWORD=devops666
      # 不設定無法登入,可以設定域名或者伺服器的IP
      - DOMAINS=jumpserver.devops.test.com,192.168.123.214:81
    ports:
      - '81:80'
    networks:
      - devopsnetwork

networks:
  devopsnetwork:
    external: true

  • DOMAINS 設定了域名和 IP 埠存取,所以現在可以直接使用預設賬號密碼 admin admin 進行登入
  • 登入成功修改密碼

JumpServer 使用 nginx 設定域名轉發

還不會在區域網申請 ssl 及設定的可以參考之前的文章 前後端都用得上的 Nginx 日常使用經驗

server {

    listen 80;
    listen       443 ssl;
    server_name jumpserver.devops.test.com;  # 自行修改成你的域名

    client_max_body_size 4096m;  # 上傳檔案大小限制

    ssl_certificate      /certs/jumpserver.devops.test.com/server.crt;
    ssl_certificate_key  /certs/jumpserver.devops.test.com/server.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
            # 這裡的 ip 是後端 JumpServer nginx 的 ip
            proxy_pass http://jms_server:80;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_request_buffering off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}
  • 設定好 nginx 過載設定生效後存取成功

JumpServer 的常規使用

  • 通過 控制檯-資產管理,增加需要管理的 機器、應用,將之前文章安裝的 linux 伺服器,mysql,redis,mongo 都設定好

  • 通過控制檯-許可權管理 授權使用者能夠管理的資產

  • 通過使用者管理和許可權管理分配資產許可權,可以是使用者或者組

  • 通過右上角的 Web 終端可以遠端連線資產

  • 新增 WebSite 後,如果 JumpServer 安裝在 Linux,無法在終端預覽!!!但是,想了個辦法讓他直接新視窗開啟

在終端通過油猴外掛開啟 WebSite 資產

  • 首先需要安裝油猴外掛:tampermonkey
  • 新增油猴指令碼
// ==UserScript==
// @name         直接開啟JumpServer網站
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       yimo
// @match        https://jumpserver.devops.test.com/luna/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=test.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    window.onload=function(){
        console.log('load custom js')
        var ulElement = document.querySelector("#winContainer > div > div > div > ul");
        if(ulElement){
            var newLi = document.createElement('li');
            newLi.innerHTML = '<span style="color:#7494f3;margin-right: 6px">油猴外掛 → 網站資產</span> 直接新視窗開啟網站';
            ulElement.appendChild(newLi);
        }
        setInterval(()=>{
            document.querySelectorAll(".node_name").forEach(s=>{
                if(s.isAddHtml)return;
                s.isAddHtml=true;
                if(s.parentNode.getAttribute("title").indexOf('http')==0){
                    console.log('檢測到站點:'+s.parentNode.getAttribute("title"))
                    s.addEventListener('click',function(e){
                         console.log('click')
                         var titleUrl = s.parentNode.getAttribute("title");
                         window.open(titleUrl);
                         e.stopPropagation();
                    })
                    return;
                }
            })
        },500);
    }
})();
  • 生效後即可直接開啟站點了

  • 希望後面可以加個設定直接開啟站點吧

踩坑記錄

  • Jumpserver 預設賬號密碼 admin admin

  • Mysql 預設賬號 root ,密碼修改的地方都同步修改

  • DOMAINS 為可信域名,設定不存在無法登入

  • mysql 和 mongodb 連線使用可以,但是連線測試有問題,待解決 issues

相關檔案

後語

通過 JumpServer 可以搭建一套測試環境的相關環境,並且將相關的網站通過其公開,成員可以直接使用,而無需記錄地址賬號等資訊,研究過程中也看了 1Panel,發現對 Docker 沒有很好的支援,準備後續接入夜鶯監控更好的檢測區域網資源的一個狀態,敬請期待。