開源jumpserver跳板機系統安裝使用
跳板機估計大部分運維朋友都接觸過,公司服務器多了,不可避免的需要用到跳板機,如果是自己運維人員用,沒有太高需求使用跳板機系統,直接利用一台具有公網IP的服務器登錄然后內網SSH到目標服務器即可。
但是有以下一些情況,讓我們需要部署跳板機系統了:
1. 網安等保評測(這點兒不用多說,做過等保的朋友應該都清楚);
2. 部分開發人員因為需要登錄線上服務器協助排查問題,這種情況一般是沒有實時的日志收集分析系統,所以需要開發人員登錄服務器跟蹤分析日志;
3. 運維團隊內部需要做審計、記錄服務器操作等;
而個人對比使用了一些跳板機系統,個人認為jumpserver這款軟件是當前最好用,最合適的開源跳板機系統,一些付費的功能比較強大,界面也美觀,但是畢竟太貴了,小公司用不起,也沒那個必要。
Jumpserver 使用 Python / Django 進行開發,可以管理SSH、 Telnet、 RDP、 VNC 協議資產,對於Linux和Windows服務器來說都能控制,具有美觀的web管理頁面,登錄資產都可以在web頁面操作,這樣也避免開發人員等少量使用服務器的人都安裝SSH 客戶端軟件。
介紹下jumpserver都有哪些組件需要安裝:
1. Jumpserver 為管理后台, 管理員可以通過 Web 頁面進行資產管理、用戶管理、資產授權等操作, 用戶可以通過 Web 頁面進行資產登錄, 文件管理等操作;
2. Coco 為 SSH Server 和 Web Terminal Server 。用戶可以使用自己的賬戶通過 SSH 或者 Web Terminal 訪問 SSH 協議和 Telnet 協議資產;
3. Luna 為 Web Terminal Server 前端頁面, 用戶使用 Web 方式登錄受控服務器所需要的組件;
4. Guacamole 為 RDP 協議和 VNC 協議資產組件, 用戶可以通過 Web Terminal 來連接 RDP 協議和 VNC 協議資產 (暫時只能通過 Web Terminal 來訪問),簡單說就是受控服務器為Windows時需要安裝;
由於我們沒有Windows服務器,全部都是Linux服務器,所以只安裝jumpserver、coco和luna 三個組件,具體安裝過程不會詳細說明,官方文檔已經夠詳細,這里簡單記錄,主要加一些自己安裝使用心得。
基本環境介紹:
1. 系統版本:CentOS Linux release 7.6.1810 (Core)
2. jumpserver版本 1.5
3. 已安裝NGINX,Redis,MySQL
4. 軟件安裝目錄定義到/data/jumpserver
第一次接觸的朋友可以參考官方詳細安裝文檔: http://docs.jumpserver.org/zh/master/setup_by_centos.html
如果只是想體驗測試一下,可以安裝官方提供的docker版,生產環境正式使用就不建議使用docker版了,請參考: http://docs.jumpserver.org/zh/master/dockerinstall.html
一:安裝Python3環境
jumpserver是基於Python3開發,默認centos系統都是Python2環境,這里保留Python2環境,安裝Python3 並使用Python3虛擬環境功能。
1. 安裝基本工具軟件
- [root@cnyunwei ~]# yum -y install wget gcc git #現在雲服務廠商服務器基本都預裝了epel源,如果沒有epel源 就安裝下 epel-release
2. 安裝Python3及工具
- [root@cnyunwei ~]# yum -y install python36 python36-devel
3. 創建Python3虛擬環境
- [root@cnyunwei ~]# cd /data
- [root@cnyunwei ~]# python3.6 -m venv py3_venv
- [root@cnyunwei ~]# source /data/py3_venv/bin/activate
- 執行source命令后當前終端會變成下面這樣,就代表當前終端在Python3環境下
- (py3_venv) [root@cnyunwei ~]#
二:安裝jumpserver組件
這里建議大家直接用Git方式拉取代碼,方便后面進行軟件升級,直接到GitHub上下載zip包方式不太便於軟件版本升級
1.安裝jumpserver管理系統
- (py3_venv) [root@cnyunwei ~]# cd /data/jumpserver
- (py3_venv) [root@cnyunwei jumpserver]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
- (py3_venv) [root@cnyunwei jumpserver]# cd ./jumpserver/requirements
- (py3_venv) [root@cnyunwei jumpserver]# yum -y install $(cat rpm_requirements.txt)
- (py3_venv) [root@cnyunwei jumpserver]# pip install --upgrade pip setuptools
- (py3_venv) [root@cnyunwei jumpserver]# pip install -r requirements.txt
- pip安裝依賴組件一般容易報錯,大家得根據自己服務器報錯對應解決
創建MySQL數據庫,並授權
- mysql -uroot -p -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'PASSWORD'; flush privileges;"
- #PASSWORD 替換為自己需要創建的密碼
修改jumpserver配置文件
- (py3_venv) [root@cnyunwei ~]# cd /data/jumpserver/jumpserver
- (py3_venv) [root@cnyunwei ~]# cp config_example.yml config.yml
- [root@cnyunwei ~]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` # 生成隨機SECRET_KEY
- [root@cnyunwei ~]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
- [root@cnyunwei ~]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16` # 生成隨機BOOTSTRAP_TOKEN
- [root@cnyunwei ~]# echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
- [root@cnyunwei ~]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /data/jumpserver/jumpserver/config.yml
- [root@cnyunwei ~]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /data/jumpserver/jumpserver/config.yml
- [root@cnyunwei ~]# sed -i "s/# DEBUG: true/DEBUG: false/g" /data/jumpserver/jumpserver/config.yml
- [root@cnyunwei ~]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /data/jumpserver/jumpserver/config.yml
- [root@cnyunwei ~]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /data/jumpserver/jumpserver/config.yml
- [root@cnyunwei ~]# sed -i "s/DB_PASSWORD: /DB_PASSWORD:數據庫密碼/g" /data/jumpserver/jumpserver/config.yml
配置文件替換了最好還是要vim打開看看里面配置,MySQL,Redis配置是否正確。
啟動jumpserver服務,這里暫時不需要后台運行,所以不加-d參數,啟動后打開新終端看下默認8080端口是否已經啟動監聽。
- (py3_venv) [root@cnyunwei ~]# cd /data/jumpserver/jumpserver
- (py3_venv) [root@cnyunwei ~]# ./jms start all
2. 安裝coco組件
- [root@cnyunwei ~]# cd /data/jumpserver
- [root@cnyunwei jumpserver]# source /data/py3_venv/bin/activate
- (py3_venv) [root@cnyunwei jumpserver]# git clone --depth=1 https://github.com/jumpserver/coco.git
- (py3_venv) [root@cnyunwei jumpserver]# cd /data/jumpserver/coco/requirements
- (py3_venv) [root@cnyunwei requirements]# yum -y install $(cat rpm_requirements.txt)
- (py3_venv) [root@cnyunwei requirements]# pip install -r requirements.txt
修改配置文件
- (py3_venv) [root@cnyunwei ~]# cd /data/jumpserver/coco
- (py3_venv) [root@cnyunwei coco]# cp config_example.yml config.yml
- (py3_venv) [root@cnyunwei coco]# sed -i "s/BOOTSTRAP_TOKEN: /BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /data/jumpserver/coco/config.yml
- (py3_venv) [root@cnyunwei coco]# sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /data/jumpserver/coco/config.yml
啟動coco服務,同樣的,因為現在是調試階段,為了方便看報錯,不后台運行,后面要配置system啟動腳本。
- (py3_venv) [root@cnyunwei coco]# ./cocod start
這個時候已經可以登錄到jumpserver 測試系統是否正常使用了,訪問http://your ipaddr:8080 ,默認賬號: admin 密碼: admin
3. jumpserver和coco添加system啟動腳本
前面兩步都沒問題,並且成功登錄到jumpserver管理系統后就該配置啟動腳本了,centos7我們采用system腳本方式。
- [root@cnyunwei ~]# vim /usr/lib/systemd/system/jms.service
- [Unit]
- Description=jms
- After=network.target mysqld.service redis.service
- Wants=mysqld.service redis.service
- [Service]
- Type=forking
- Environment="PATH=/data/py3_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
- ExecStart=/data/jumpserver/jumpserver/jms start all -d
- ExecReload=
- ExecStop=/data/jumpserver/jumpserver/jms stop
- [Install]
- WantedBy=multi-user.target
- [root@cnyunwei ~]# vim /usr/lib/systemd/system/coco.service
- [Unit]
- Description=coco
- After=network.target jms.service
- [Service]
- Type=forking
- PIDFile=/data/jumpserver/coco/coco.pid
- Environment="PATH=/data/py3_venv/bin"
- ExecStart=/data/jumpserver/coco/cocod start -d
- ExecReload=
- ExecStop=/data/jumpserver/coco/cocod stop
- [Install]
- WantedBy=multi-user.target
4.安裝luna前端
luna是一個純靜態頁面,所以下載zip包解壓,配置上NGINX即可。
- [root@cnyunwei ~]# cd /data/jumpserver/
- [root@cnyunwei jumpserver]# wget https://github.com/jumpserver/luna/releases/download/1.5.0/luna.tar.gz
- [root@cnyunwei jumpserver]# tar xf luna.tar.gz
- [root@cnyunwei jumpserver]# chown root:root -R luna
5. 配置NGINX
- [root@cnyunwei ~]# cat /usr/local/nginx/conf/vhost/jumpserver.conf
- server {
- listen 443 ssl http2;
- ssl on;
- ssl_certificate /usr/local/nginx/conf/ssl/cnyunwei.cc.cer;
- ssl_certificate_key /usr/local/nginx/conf/ssl/cnyunwei.cc.key;
- ssl_session_timeout 5m;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4!DH:!DHE;
- ssl_prefer_server_ciphers on;
- server_name jmp.cnyunwei.cc;
- client_max_body_size 100m; # 錄像及文件上傳大小限制
- location /luna/ {
- try_files $uri / /index.html;
- alias /data/jumpserver/luna/; # luna 路徑, 如果修改安裝目錄, 此處需要修改
- }
- location /media/ {
- add_header Content-Encoding gzip;
- root /data/jumpserver/jumpserver/data/; # 錄像位置, 如果修改安裝目錄, 此處需要修改
- }
- location /static/ {
- root /data/jumpserver/jumpserver/data/; # 靜態資源, 如果修改安裝目錄, 此處需要修改
- }
- location /socket.io/ {
- proxy_pass http://localhost:5000/socket.io/; # 如果coco安裝在別的服務器, 請填寫它的ip
- proxy_buffering off;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- access_log off;
- }
- location /coco/ {
- proxy_pass http://localhost:5000/coco/; # 如果coco安裝在別的服務器, 請填寫它的ip
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- access_log off;
- }
- location / {
- proxy_pass http://localhost:8080; # 如果jumpserver安裝在別的服務器, 請填寫它的ip
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
- server {
- listen 80;
- server_name jmp.cnyunwei.cc;
- rewrite ^ https://$server_name$request_uri? permanent;
- }
三. 訪問測試
啟動NGINX,通過配置的域名地址 https://jmp.cnyunwei.cc 登錄,可以看到整個系統的界面確實還是非常美觀的,功能上來說也都足夠使用。
jumpserver跳板機系統主要需要設置兩個賬戶:管理用戶,系統用戶 需要先創建好這兩個類型的用戶。
管理用戶是資產(被控服務器)上的root,或擁有 NOPASSWD: ALL sudo權限的用戶, Jumpserver使用該用戶來 `推送系統用戶`、`獲取資產硬件信息`等。
系統用戶是 Jumpserver跳轉登錄資產時使用的用戶,可以理解為登錄服務器的用戶名,就像直接SSH登錄服務器一樣,可以使用root,也可以使用其他普通賬戶。
接下來就可以添加資產了,資產添加后檢測成功在列表中還會顯示資產基本配置情況:
四:登錄受控服務器
登錄方式一:通過web頁面登錄,admin賬號下通過【會話管理】-【web終端】即可打開luna
在頁面選擇對應服務器即可登錄
登錄方式二:通過SSH 連接到jumpserver服務器
這里要注意了,SSH 的端口不是Linux系統sshd服務的端口,是coco服務監聽的端口,默認coco監聽端口是2222
- ssh -p 2222 admin@jump.cnyunwei.cc
整體評測下來jumpserver完全滿足我們對跳板機系統的需求,web方式登錄更方便,不需要有SSH客戶端,而SSH 的方式登錄更方便配合rz、sz 等命令上傳下載文件,雖然web版也可以進行文件上傳下載,但是操作起來不是那么方便。
以上就是對jumpserver跳板機系統的基本記錄了,系統還可以分組設置資產權限,比如設置開發人員一個組,只允許使用普通系統用戶登錄受控服務器,同時有錄像回放功能,可追溯操作過的命令,還可以設置命令過濾,限制使用某些執行命令(命令過濾有個嚴重bug,把命令寫到腳本里面就無法過濾),功能是非常強大的。