前言
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
- mariadb 數據庫:
-
開放端口
- 未開放 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
- 運行:
docker compose up -d
即可 - 一切正常:默認訪問 http://192.168.123.214:81 則啓動成功
- 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 沒有很好的支持,準備後續接入夜鶯監控更好的檢測局域網資源的一個狀態,敬請期待。