ZERO
????持續(xù)更新 請關(guān)注:https://zorkelvll.cn/blogs/zorkelvll/articles/2018/11/15/1542274556926
背景
??本文主要是記錄在CentOS7.4下牍汹,參考Jumpserver官方文檔疾党,搭建jumpserver環(huán)境的過程墨状!
一、環(huán)境
#設(shè)置防火墻
firewall-cmd --zone=public --add-port=80/tcp --permanent # nginx 端口
firewall-cmd --zone=public --add-port=2222/tcp --permanent # 用戶SSH登錄端口 coco
firewall-cmd --reload # 重新載入規(guī)則
#設(shè)置SELinux
/usr/sbin/sestatus -v #查看強制訪問控制SELinux的狀態(tài)尤仍,若是enabled繼續(xù)執(zhí)行下面兩個命令,否則為disabled不需要繼續(xù)執(zhí)行下面兩個命令
setenforce 0 #暫時關(guān)閉SELinux
sed -i "s/enforcing/disabled/g" `grep enforcing -rl /etc/selinux/config` #關(guān)閉SELinux
# 修改字符集,否則可能報 input/output error的問題,因為日志里打印了中文
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
二见坑、準(zhǔn)備 Python3 和 Python 虛擬環(huán)境
yum -y install wget gcc epel-release git #安裝依賴包
yum -y install python36 python36-devel #安裝python3.6
#建立python虛擬環(huán)境拂玻,因為 CentOS 6/7 自帶的是 Python2,而 Yum 等工具依賴原來的 Python,為了不擾亂原來的環(huán)境我們來使用 Python 虛擬環(huán)境
cd /opt
python3.6 -m venv py3
source /opt/py3/bin/activate
# 看到下面的提示符代表成功,以后運行 Jumpserver 都要先運行以上 source 命令,以下所有命令均在該虛擬環(huán)境中運行
(py3) [root@localhost py3]
#自動載入 Python 虛擬環(huán)境配置
#此項僅為懶癌晚期的人員使用,防止運行 Jumpserver 時忘記載入 Python 虛擬環(huán)境導(dǎo)致程序無法運行。使用autoenv
cd /opt
git clone https://github.com/kennethreitz/autoenv.git
echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
source ~/.bashrc
三取募、安裝jumpserver
1琐谤、clone項目
cd /opt/
git clone https://github.com/jumpserver/jumpserver.git
echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env # 進(jìn)入 jumpserver 目錄時將自動載入 python 虛擬環(huán)境
# 首次進(jìn)入 jumpserver 文件夾會有提示,按 y 即可
# Are you sure you want to allow this? (y/N) y
2、安裝依賴RPM包
cd /opt/jumpserver/requirements
yum -y install $(cat rpm_requirements.txt) # 如果沒有任何報錯請繼續(xù)
3玩敏、安裝python依賴包
pip install --upgrade pip setuptools
pip install -r requirements.txt
4斗忌、安裝 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke**
#centos7-yum方式安裝
yum -y install redis
systemctl enable redis
systemctl start redis
#centos6-yum方式安裝
yum -y install redis
chkconfig redis on
service redis start
源碼安裝质礼,參考
5、安裝MySQL
參考
#centos7
yum -y install mariadb mariadb-devel mariadb-server # centos7下安裝的是mariadb
systemctl enable mariadb
systemctl start mariadb
# centos6 自帶的 mysql5.1 不支持,請在其他服務(wù)器上創(chuàng)建 jumpserver 數(shù)據(jù)庫連接
6织阳、創(chuàng)建Jumpserver數(shù)據(jù)庫并授權(quán)
mysql -uroot
> create database jumpserver default charset 'utf8';
> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '復(fù)雜密碼大小寫字母數(shù)字特殊符號';
> flush privileges;
> quit
7几苍、修改Jumpserver配置文件
cd /opt/jumpserver
cp config_example.py config.py
vim config.py
# 注意對齊,不要直接復(fù)制本文檔的內(nèi)容,實際內(nèi)容以文件為準(zhǔn),本文僅供參考,修改配置內(nèi)容如下:
"""
jumpserver.config
~~~~~~~~~~~~~~~~~
Jumpserver project setting file
:copyright: (c) 2014-2017 by Jumpserver Team
:license: GPL v2, see LICENSE for more details.
"""
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
class Config:
# Use it to encrypt or decrypt data
# Jumpserver 使用 SECRET_KEY 進(jìn)行加密,請務(wù)必修改以下設(shè)置
# SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x'
SECRET_KEY = '請隨意輸入隨機字符串(推薦字符大于等于 50位)'
# Django security setting, if your disable debug model, you should setting that
ALLOWED_HOSTS = ['*']
# DEBUG 模式 True為開啟 False為關(guān)閉,默認(rèn)開啟,生產(chǎn)環(huán)境推薦關(guān)閉
# 注意:如果設(shè)置了DEBUG = False,訪問8080端口頁面會顯示不正常,需要搭建 nginx 代理才可以正常訪問
DEBUG = os.environ.get("DEBUG") or True
# 日志級別,默認(rèn)為DEBUG,可調(diào)整為INFO, WARNING, ERROR, CRITICAL,默認(rèn)INFO
LOG_LEVEL = os.environ.get("LOG_LEVEL") or 'WARNING'
LOG_DIR = os.path.join(BASE_DIR, 'logs')
# 使用的數(shù)據(jù)庫配置,支持sqlite3, mysql, postgres等,默認(rèn)使用sqlite3
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# 默認(rèn)使用SQLite3,如果使用其他數(shù)據(jù)庫請注釋下面兩行
# DB_ENGINE = 'sqlite3'
# DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
# 如果需要使用mysql或postgres,請取消下面的注釋并輸入正確的信息,本例使用mysql做演示(mariadb也是mysql)
DB_ENGINE = os.environ.get("DB_ENGINE") or 'mysql'
DB_HOST = os.environ.get("DB_HOST") or '127.0.0.1'
DB_PORT = os.environ.get("DB_PORT") or 3306
DB_USER = os.environ.get("DB_USER") or 'jumpserver'
DB_PASSWORD = os.environ.get("DB_PASSWORD") or '復(fù)雜密碼大小寫字母數(shù)字特殊符號'
DB_NAME = os.environ.get("DB_NAME") or 'jumpserver'
# Django 監(jiān)聽的ip和端口,生產(chǎn)環(huán)境推薦把0.0.0.0修改成127.0.0.1,這里的意思是允許x.x.x.x訪問,127.0.0.1表示僅允許自身訪問
# ./manage.py runserver 127.0.0.1:8080
HTTP_BIND_HOST = '0.0.0.0'
HTTP_LISTEN_PORT = 9091
# Redis 相關(guān)設(shè)置
REDIS_HOST = os.environ.get("REDIS_HOST") or '127.0.0.1'
REDIS_PORT = os.environ.get("REDIS_PORT") or 6379
REDIS_PASSWORD = os.environ.get("REDIS_PASSWORD") or ''
REDIS_DB_CELERY = os.environ.get('REDIS_DB') or 3
REDIS_DB_CACHE = os.environ.get('REDIS_DB') or 4
def __init__(self):
pass
def __getattr__(self, item):
return None
class DevelopmentConfig(Config):
pass
class TestConfig(Config):
pass
class ProductionConfig(Config):
pass
# Default using Config settings, you can write if/else for different env
config = DevelopmentConfig()
8、生成數(shù)據(jù)庫表結(jié)構(gòu)和初始化數(shù)據(jù)
cd /opt/jumpserver/utils
sh make_migrations.sh
9陈哑、運行jumpserver
cd /opt/jumpserver
./jms start all # 后臺運行使用 -d 參數(shù)./jms start all -d
# 新版本更新了運行腳本,使用方式./jms start|stop|status|restart all 后臺運行請?zhí)砑?-d 參數(shù)
10、開放9091端口
firewall-cmd --zone=public --add-port=9091/tcp --permanent
firewall-cmd --reload # 重新載入規(guī)則
????運行不報錯,請瀏覽器訪問http://ip:9091/默認(rèn)賬號: admin 密碼: admin 頁面顯示不正常先不用處理,繼續(xù)往下操作,后面搭建 nginx 代理后即可正常訪問,原因是因為 django 無法在非 debug 模式下加載靜態(tài)資源
四伸眶、安裝SSH Server和WebSocketServer:Coco
1惊窖、clone項目coco
cd /opt
source /opt/py3/bin/activate
git clone https://github.com/jumpserver/coco.git
echo "source /opt/py3/bin/activate" > /opt/coco/.env # 進(jìn)入 coco 目錄時將自動載入 python 虛擬環(huán)境
# 首次進(jìn)入 coco 文件夾會有提示,按 y 即可
# Are you sure you want to allow this? (y/N) y
2、安裝依賴
cd /opt/coco/requirements
yum -y install $(cat rpm_requirements.txt)
pip install -r requirements.txt
3厘贼、修改配置文件并運行
cd /opt/coco
mkdir keys logs
cp conf_example.py conf.py # 如果 coco 與 jumpserver 分開部署,請手動修改 conf.py
vim conf.py
#注意對齊,不要直接復(fù)制本文檔的內(nèi)容
**注意: 配置文件是 Python 格式,不要用 TAB,而要用空格**
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import os
BASE_DIR = os.path.dirname(__file__)
class Config:
"""
Coco config file, coco also load config from server update setting below
"""
# 項目名稱, 會用來向Jumpserver注冊, 識別而已, 不能重復(fù)
# NAME = "localhost"
NAME = "coco"
# Jumpserver項目的url, api請求注冊會使用, 如果Jumpserver沒有運行在127.0.0.1:9091,請修改此處
# CORE_HOST = os.environ.get("CORE_HOST") or 'http://127.0.0.1:9091'
CORE_HOST = 'http://127.0.0.1:9091'
# 啟動時綁定的ip, 默認(rèn) 0.0.0.0
# BIND_HOST = '0.0.0.0'
# 監(jiān)聽的SSH端口號, 默認(rèn)2222
# SSHD_PORT = 2222
# 監(jiān)聽的HTTP/WS端口號,默認(rèn)5000
# HTTPD_PORT = 5000
# 項目使用的ACCESS KEY, 默認(rèn)會注冊,并保存到 ACCESS_KEY_STORE中,
# 如果有需求, 可以寫到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY = None
# ACCESS KEY 保存的地址, 默認(rèn)注冊后會保存到該文件中
# ACCESS_KEY_STORE = os.path.join(BASE_DIR, 'keys', '.access_key')
# 加密密鑰
# SECRET_KEY = None
# 設(shè)置日志級別 ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL', 'CRITICAL']
# LOG_LEVEL = 'INFO'
LOG_LEVEL = 'WARN'
# 日志存放的目錄
# LOG_DIR = os.path.join(BASE_DIR, 'logs')
# Session錄像存放目錄
# SESSION_DIR = os.path.join(BASE_DIR, 'sessions')
# 資產(chǎn)顯示排序方式, ['ip', 'hostname']
# ASSET_LIST_SORT_BY = 'ip'
# 登錄是否支持密碼認(rèn)證
# PASSWORD_AUTH = True
# 登錄是否支持秘鑰認(rèn)證
# PUBLIC_KEY_AUTH = True
# SSH白名單
# ALLOW_SSH_USER = 'all' # ['test', 'test2']
# SSH黑名單, 如果用戶同時在白名單和黑名單,黑名單優(yōu)先生效
# BLOCK_SSH_USER = []
# 和Jumpserver 保持心跳時間間隔
# HEARTBEAT_INTERVAL = 5
# Admin的名字,出問題會提示給用戶
# ADMINS = ''
COMMAND_STORAGE = {
"TYPE": "server"
}
REPLAY_STORAGE = {
"TYPE": "server"
}
# SSH連接超時時間 (default 15 seconds)
# SSH_TIMEOUT = 15
# 語言 = en
LANGUAGE_CODE = 'zh'
config = Config()
./cocod start # 后臺運行使用 -d 參數(shù)./cocod start -d
# 新版本更新了運行腳本,使用方式./cocod start|stop|status|restart 后臺運行請?zhí)砑?-d 參數(shù)
啟動成功后去Jumpserver 會話管理-終端管理([http://ip:9091/terminal/terminal/](http://ip:9091/terminal/terminal/))接受coco的注冊!!
注意:::在web頁面接收coco的注冊的時候界酒,填入的ip地址不能是127.0.0.1,需要是主機實際的外網(wǎng)ip地址
五嘴秸、安裝web terminal前端Luna
????Luna 已改為純前端,需要 Nginx 來運行訪問
????訪問(https://github.com/jumpserver/luna/releases)下載對應(yīng)版本的 release 包,直接解壓,不需要編譯
cd /opt
wget https://github.com/jumpserver/luna/releases/download/v1.4.4/luna.tar.gz
tar xvf luna.tar.gz
chown -R root:root luna
六毁欣、安裝windows支持組件(本次跳過了,不需要管理windows資產(chǎn)可以跳過這一項)
????Guacamole 需要 Tomcat 來運行
1岳掐、安裝依賴
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
yum install -y java-1.8.0-openjdk libtool
yum install -y cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel
yum install -y ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel ghostscript
mkdir /usr/local/lib/freerdp/
ln -s /usr/local/lib/freerdp /usr/lib64/freerdp
2凭疮、編譯安裝guacamole服務(wù)
cd /opt
git clone https://github.com/jumpserver/docker-guacamole.git
cd /opt/docker-guacamole/
tar -xf guacamole-server-0.9.14.tar.gz
cd guacamole-server-0.9.14
autoreconf -fi
./configure --with-init-dir=/etc/init.d
make && make install
cd ..
rm -rf guacamole-server-0.9.14
ldconfig
3、配置tomcat-8081
mkdir -p /config/guacamole /config/guacamole/lib /config/guacamole/extensions # 創(chuàng)建 guacamole 目錄
cp /opt/docker-guacamole/guacamole-auth-jumpserver-0.9.14.jar /config/guacamole/extensions/guacamole-auth-jumpserver-0.9.14.jar
cp /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/guacamole/ # guacamole 配置文件
cd /config
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
tar xf apache-tomcat-8.5.35.tar.gz
rm -rf apache-tomcat-8.5.35.tar.gz
mv apache-tomcat-8.5.35 tomcat8
rm -rf /config/tomcat8/webapps/*
cp /opt/docker-guacamole/guacamole-0.9.14.war /config/tomcat8/webapps/ROOT.war # guacamole client
sed -i 's/Connector port="8080"/Connector port="8081"/g' `grep 'Connector port="8080"' -rl /config/tomcat8/conf/server.xml` # 修改默認(rèn)端口為 8081
sed -i 's/FINE/WARNING/g' `grep 'FINE' -rl /config/tomcat8/conf/logging.properties` # 修改 log 等級為 WARNING
cd /config
wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz
tar xf linux-amd64.tar.gz -C /bin/
chmod +x /bin/ssh-forward
4串述、配置環(huán)境變量
export JUMPSERVER_SERVER=http://127.0.0.1:9091 \# http://127.0.0.1:9091 指 jumpserver 訪問地址
echo "export JUMPSERVER_SERVER=http://127.0.0.1:9091" >\> ~/.bashrc
export JUMPSERVER\_KEY\_DIR=/config/guacamole/keys
echo "export JUMPSERVER\_KEY\_DIR=/config/guacamole/keys" >\> ~/.bashrc
export GUACAMOLE_HOME=/config/guacamole
echo "export GUACAMOLE_HOME=/config/guacamole" >\> ~/.bashrc
5执解、啟動Guacamole
/etc/init.d/guacd start
sh /config/tomcat8/bin/startup.sh
????啟動成功后去Jumpserver 會話管理-終端管理(http://ip:9091/terminal/terminal/)接受[Gua]開頭的一個注冊
七、配置nginx整合各個組件
????nginx安裝可參見:Nginx環(huán)境安裝纲酗,本文是針對采用了源碼安裝的nginx進(jìn)行配置的
vim /usr/local/nginx/coonf/nginx.conf
#添加如下server配置
server {
listen 9092; # 代理端口,以后將通過此端口進(jìn)行訪問,不再通過9091端口
server_name caizhaoke.cn; # 修改成你的域名
client_max_body_size 100m; # 錄像及文件上傳大小限制
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna 路徑,如果修改安裝目錄,此處需要修改
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # 錄像位置,如果修改安裝目錄,此處需要修改
}
location /static/ {
root /opt/jumpserver/data/; # 靜態(tài)資源,如果修改安裝目錄,此處需要修改
}
location /socket.io/ {
proxy_pass http://localhost:5000/socket.io/; # 如果coco安裝在別的服務(wù)器,請?zhí)顚懰膇p
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安裝在別的服務(wù)器,請?zhí)顚懰膇p
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 /guacamole/ {
proxy_pass http://localhost:8081/; # 如果guacamole安裝在別的服務(wù)器,請?zhí)顚懰膇p
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
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:9091; # 如果jumpserver安裝在別的服務(wù)器,請?zhí)顚懰膇p
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
運行nginx
nginx -t # 確保配置沒有問題, 有問題請先解決
# CentOS 7
systemctl start nginx
systemctl enable nginx
# CentOS 6
service nginx start
chkconfig nginx on
八衰腌、測試使用jumpserver
檢查應(yīng)用是否已經(jīng)正常運行
服務(wù)全部啟動后,訪問 http://ip:9092,訪問nginx代理的端口9092,不要再通過9091端口訪問
默認(rèn)賬號: admin 密碼: admin
如果部署過程中沒有接受應(yīng)用的注冊,需要到Jumpserver 會話管理-終端管理 接受 Coco Guacamole 等應(yīng)用的注冊。
測試連接
#如果登錄客戶端是 macOS 或 Linux ,登錄語法如下
ssh -p2222 admin@ip
sftp -P2222 admin@ip
#密碼: admin
#如果登錄客戶端是 Windows ,Xshell Terminal 登錄語法如下
ssh admin@ip 2222
sftp admin@ip 2222
#密碼: admin
如果能登陸代表部署成功
# sftp默認(rèn)上傳的位置在資產(chǎn)的 /tmp 目錄下
# windows拖拽上傳的位置在資產(chǎn)的 Guacamole RDP上的 G 目錄下
問題
1觅赊、若jumpserver管理頁面及終端管理頁面均可以訪問右蕊,但是點擊某臺主機終端跳轉(zhuǎn)登錄終端時,一直卡住或者說沒有響應(yīng)吮螺,則應(yīng)該是coco應(yīng)用掛掉了饶囚,重啟即可解決!
cd /opt/coco
./cocod start -d