jumpserver部署实践
当前选择的版本是
https://docs.jumpserver.org/zh/v2.12.0/install/setup_by_fast/
这种开源工具,没必要追求太新的,功能太多,用不上,且部署繁琐。
虽提供了docker部署,暂时先不用。
1. 基础组件
Lina 是 JumpServer 的前端 UI 项目, 主要使用 Vue, Element UI 完成, 名字来源于 Dota 英雄 Lina
Luna 是 JumpServer Web Terminal 前端项目(网页命令行)
Lina 和 Luna 为纯静态文件,最终由 nginx 整合。
Core 是 JumpServer 的核心组件,由 Django 二次开发而来。
Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。
Lion 使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。
2.架构图
3. 服务器硬件环境
jumpserver服务器
4C cpu/16GB memory/200G disk
centos7.* 64位
硬盘主要用于存储审计录像,因此需要根据客户的资产数量,以及使用程度评估,建议在200G以上;
以100台Linux资产为例,日常使用,200G磁盘可以存储5~6个月的录屏。
存储空间计算规则
- 每小时产生录像约10M
- 每天操作约4h
- 保留过期期限30天
存储空间,以100台机器算
>>> 10*4*30*100/1024
117.1875
4.基础环境准备
注意得是新机器,否则你可能会遇见各种坑,那就随机应变的解决吧
1.环境准备
centos7
关闭防火墙 firewalld selinux
iptables -F
systemctl stop firewalld
systemctl disable firewalld
# yum源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 基础环境安装
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
# 需要部署跳板机依赖软件,重要
yum -y install git python-pip gcc automake autoconf python-devel vim sshpass lrzsz readline-devel zlib zlib-devel openssl openssl-devel
git --- 用于下载jumpserver软件程序
python-pip --- 用于安装python软件
gcc --- 解析代码中C语言信息(解释器)
automake --- 实现软件自动编译过程
autoconf --- 实现软件自动配置过程
python-devel --- 系统中需要有python依赖
readline-devel --- 在操作python命令信息时,实现补全功能
3.修改系统字符集为中文
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
# 检查系统字符集
[root@master-61 ~]#export LC_ALL=zh_CN.UTF-8
[root@master-61 ~]#locale
LANG=en_US.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8
5.环境要求
Name | Core | Python | MySQL | MariaDB | Redis |
---|---|---|---|---|---|
Version | v2.12.0 | >= 3.6 | >= 5.7 | >= 10.2 | >= 6 |
一.部署mysql5.7
# 设置 Repo
yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm
# 关闭秘钥检查
sed -i '/gpgcheck=1/c gpgcheck=0' /etc/yum.repos.d/mysql-community*
# 安装 MySQL
yum clean all
yum install -y mysql-community-server
# 数据库参数解释
# 使用--initialize-insecure,不会root生成密码。这是不安全的;假设您在将服务器投入生产使用之前及时为帐户分配了密码。
# 配置 MySQL
if [ ! "$(cat /usr/bin/mysqld_pre_systemd | grep -v ^\# | grep initialize-insecure )" ]; then
sed -i "s@--initialize @--initialize-insecure @g" /usr/bin/mysqld_pre_systemd
fi
# 启动 MySQL
systemctl enable mysqld
systemctl start mysqld
# 数据库授权,改密码
mysql -uroot
mysql> create database jumpserver default charset 'utf8';
Query OK, 1 row affected (0.00 sec)
mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'jumpserver'@'%' identified by 'www.yuchaoit.cn';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on jumpserver.* to 'jumpserver'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
二.部署redis-6.2.4
# 下载源码
yum -y install epel-release wget make gcc-c++
cd /opt
wget https://download.redis.io/releases/redis-6.2.4.tar.gz
# 安装redis
tar -xf redis-6.2.4.tar.gz
cd redis-6.2.4
make && make install PREFIX=/usr/local/redis
# 配置redis
cp redis.conf /etc/redis.conf
sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf
sed -i "s/daemonize no/daemonize yes/g" /etc/redis.conf
sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf
sed -i "481i requirepass www.yuchaoit.cn" /etc/redis.conf
# 配置启动脚本
cat >/etc/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
EOF
# 启动redis
systemctl enable redis
systemctl start redis
# 测试redis
[root@db-52 /opt/redis-6.2.4]#/usr/local/redis/bin/redis-cli --version
redis-cli 6.2.4
[root@db-52 /opt/redis-6.2.4]#/usr/local/redis/bin/redis-cli auth www.yuchaoit.cn
OK
三.部署后端core
# 友情提醒,请给后端服务器,至少4G内存。
Core 是 JumpServer 的核心组件,由 Django 二次开发而来, 内置了 Lion Celery Beat Flower Daphne 服务。
# 下载源代码
mkdir /opt/jumpserver-v2.12.0
wget -O /opt/jumpserver-v2.12.0.tar.gz https://github.com/jumpserver/jumpserver/archive/refs/tags/v2.12.0.tar.gz
# 去除解压目录的一级目录
tar -xf jumpserver-2.12.0.tar.gz -C /opt/jumpserver-v2.12.0 --strip-components 1
# 安装该项目依赖的linux依赖
[root@master-61 /opt/jumpserver-v2.12.0]#ll /opt/jumpserver-v2.12.0/requirements/
总用量 28
requirements/ # 对应操作系统需要的依赖包
├── alpine_requirements.txt # Alpine
├── deb_buster_requirements.txt # Debian 10
├── deb_requirements.txt # 基于 Debian 的发行版(如: Ubuntu)
├── issues.txt # macOS 一些问题及解决方案
├── mac_requirements.txt # macOS
├── requirements.txt # python
└── rpm_requirements.txt # 基于 RedHat 的发行版(如: CentOS)
# 安装命令
yum install -y $(cat /opt/jumpserver-v2.12.0/requirements/rpm_requirements.txt)
1.安装python3
从 Python 网站获取部署 Python3 的方法,请根据 环境要求,通过命令行中判断是否安装完成。
# 当前机器只有python2
[root@master-61 /opt/jumpserver-v2.12.0]#python
python python2 python2.7 python2.7-config python2-config python-config
#安装依赖
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
# 下载源码,且编译安装
cd /opt && wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar -zxf Python-3.6.9.tgz
cd Python-3.6.9/
./configure --prefix=/opt/python369
make && make install
# 设置环境变量
echo 'export PATH=$PATH:/opt/python369/bin/' >> /etc/profile
source /etc/profile
# 查看版本
[root@master-61 /opt/Python-3.6.9]#python3 -V
Python 3.6.9
[root@master-61 ~]#pip3 -V
pip 18.1 from /opt/python369/lib/python3.6/site-packages/pip (python 3.6)
# pip3是管理python程序的模块依赖包的
# yum是给centos安装rpm包依赖的
# pip3命令是给python3,给python项目,安装项目所需的依赖的
2.安装python虚拟环境
#设置pip3的下载源,豆瓣源,加速模块下载,就和配置yum源一个意思
mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url=https://pypi.douban.com/simple
# 安装python虚拟环境
python的项目管理方式,在线上要基于虚拟环境部署,便于管理多项目,防止依赖冲突。
这里需要对python开发的模块依赖管理有一定的认识,方可理解;
# 创建虚拟环境
cd /opt && python3 -m venv /opt/py3
# 激活虚拟环境,通过PATH即可理解原理
[root@master-61 /opt]#source /opt/py3/bin/activate
(py3) [root@master-61 /opt]#
(py3) [root@master-61 /opt]#echo $PATH
/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python369/bin/
3.安装core后端的项目依赖
虚拟环境,必须每次都要激活后,方可使用该python解释器。
(py3) [root@master-61 /opt]#cd /opt/jumpserver-v2.12.0/requirements/
(py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#ls
alpine_requirements.txt deb_requirements.txt mac_requirements.txt rpm_requirements.txt
deb_buster_requirements.txt issues.txt requirements.txt
(py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#pip3 install -r /opt/jumpserver-v2.12.0/requirements/requirements.txt
检查解释器的模块依赖
安装的模块依赖大约这么多,不一定完全一样
(py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#pip list | wc -l
198
4.修改core配置文件
# 你在部署core服务,后端python服务的时候,确保全程激活虚拟环境
# 拷贝配置文件,修改配置文件如下
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#cp config_example.yml config.yml
修改如下
jumpserver整个架构的所有组件,相互之间的通信,都是基于一个密钥来加密的。
基于如下命令,生成2个密钥。
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
SECRET_KEY: "$SECRET_KEY"
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
DEBUG: true # 开发建议打开 DEBUG, 生产环境应该关闭
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true # 浏览器关闭 session 过期
DB_ENGINE: mysql # 数据库引擎是mysql
DB_HOST: 10.0.0.51 # 自行配置 数据库相关
DB_PORT: 3306 # 数据库端口
DB_USER: jumpserver # 数据库远程连接的用户
DB_PASSWORD: www.yuchaoit.cn # mysql密码(必须是str类型,不能是init类型)
DB_NAME: jumpserver # mysql存储的库名
HTTP_BIND_HOST: 0.0.0.0 # core服务运行的地址
HTTP_LISTEN_PORT: 8080 # core服务运行的端口
WS_LISTEN_PORT: 8070 # 后端websocket协议的端口
REDIS_HOST: 10.0.0.51 # 自行配置 Redis 相关
REDIS_PORT: 6379
REDIS_PASSWORD: www.yuchaoit.cn # 自定义的redis密码
因此最终的配置如下
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#cat config.yml
SECRET_KEY: "$SECRET_KEY"
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
DEBUG: true
LOG_LEVEL: DEBUG
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 10.0.0.51
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: www.yuchaoit.cn
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 10.0.0.51
REDIS_PORT: 6379
REDIS_PASSWORD: www.yuchaoit.cn
5.数据库迁移,生成数据表
通过python3命令,生成jumpserver的核心数据库,数据表内容,会写入到mysql
(py3) [root@master-61 /opt/jumpserver-v2.12.0/apps]#python manage.py makemigrations
此步骤,会写入mysql数据库的jumpserver库中的数据表
(py3) [root@master-61 /opt/jumpserver-v2.12.0/apps]#python manage.py migrate
有了数据之后,可以启动后端了
进入到jumpserver源码目录中,它提供好了启动脚本。
一键执行python的启动服务脚本,运行后端所有程序
并且是后台运行,不会占用你的窗口,xshell关了,也不会断开。
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#ls /opt/jumpserver-v2.12.0/jms
/opt/jumpserver-v2.12.0/jms
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#./jms start all -d
检查所有的组件,状态,确保有进程id号,才是对的。
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#./jms status
gunicorn is running: 2977
flower is running: 2992
daphne is running: 3152
celery_ansible is running: 3347
celery_default is running: 3448
beat is running: 3587
确保这6个进程的pid,都存在,即正确。以及查看该进程的端口,注意是端口。
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8070 0.0.0.0:* LISTEN 3152/python3
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2977/python3
tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN 2992/python3
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 958/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1127/master
tcp6 0 0 :::5555 :::* LISTEN 2992/python3
tcp6 0 0 :::22 :::* LISTEN 958/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1127/master
6.首次访问登录,修改密码
首次是可以访问,它会让你修改密码,下一次,人家代码中限制,你就没法直接访问后台了,。必须通过前端lina服务器,才能访问到后台。
admin
admin
修改密码为:www.yuchaoit.cn
部署到这里,可以退出虚拟环境
记住,虚拟环境影响的只是python的PATH。
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#deactivate
四.部署前端lina
1.安装nodejs
1. 下载前端源代码,解压缩。
mkdir -p /opt/lina-v2.12.0
wget -O /opt/lina-v2.12.0.tar.gz https://github.com/jumpserver/lina/archive/refs/tags/v2.12.0.tar.gz
cd /opt/lina-v2.12.0
tar -xf lina-2.12.0.tar.gz -C /opt/lina-v2.12.0 --strip-components 1
2. 部署nodejs
# node.js和python,php一样,是一个编程语言,专门运行*.js程序的。
# 部署nodejs是因为,前端源代码是一堆*.js文件,需要用node.js解释器去运行
mkdir -p /opt/node-v10.24.1 && cd /opt/node-v10.24.1 && wget https://nodejs.org/dist/v10.24.1/node-v10.24.1-linux-x64.tar.gz
# 这里下载,解压缩的node.js解释器,是一个二进制的命令,无须安装了,配置PATH即可使用
tar -xf node-v10.24.1-linux-x64.tar.gz -C /opt/node-v10.24.1 --strip-components 1
vim /etc/profile
export PATH=$PATH:/opt/python369/bin/:/opt/node-v10.24.1/bin
source /etc/profile
[root@master-61 /opt/node-v10.24.1/bin]#node -v
v10.24.1
[root@master-61 /opt/node-v10.24.1/bin]#npm -v
6.14.12
# npm命令是管理 node.js项目的依赖工具,装前端依赖模块的
# 到这里,前端的node.js开发环境,就已经部署好了
2.配置前端npm的下载加速源
npm config set registry https://registry.npm.taobao.org
npm config get registry
3.安装前端源代码的依赖
进入源代码目录,执行命令,安装即可
# 先安装yarn工具,为了安装前端vue的依赖,跟着操作就行,都是前端开发的知识。
npm install -g yarn
# 通过如下命令,安装前端的依赖
[root@master-61 /opt/lina-v2.12.0]#yarn install
4.修改前端的js文件,设置一些运行参数
[root@master-61 /opt/lina-v2.12.0]#vim .env.development
# 全局环境变量 请勿随意改动
ENV = 'development'
# base api
VUE_APP_BASE_API = ''
VUE_APP_PUBLIC_PATH = '/ui/'
# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
# It only does one thing by converting all import() to require().
# This configuration can significantly increase the speed of hot updates,
# when you have a large number of pages.
# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# External auth
VUE_APP_LOGIN_PATH = '/core/auth/login/'
VUE_APP_LOGOUT_PATH = '/core/auth/logout/'
# Dev server for core proxy
VUE_APP_CORE_HOST = 'http://localhost:8080' # 修改成 Core 的 url 地址
VUE_APP_ENV = 'development'
# 我们这里是测试,前端的lina项目和后端的core项目运行在同一台机器,因此 这里用前端后端在一起的用法。
# 我们刚才去访问 core的堡垒机登录页面,确认后端端口是8080
5.运行前端(后台运行)
# 执行如下命令,让lina在后台运行即可。
[root@master-61 /opt/lina-v2.12.0]#nohup yarn serve &
[1] 16518
[root@master-61 /opt/lina-v2.12.0]#nohup: ignoring input and appending output to ‘nohup.out’
[root@master-61 /opt/lina-v2.12.0]#jobs
[1]+ Running nohup yarn serve &
# 检查端口
[root@master-61 /opt/lina-v2.12.0]#netstat -tunlp |grep 9528
tcp 0 0 0.0.0.0:9528 0.0.0.0:* LISTEN 16529/node
6.测试访问前端
访问的地址入口是前端
http://10.0.0.61:9528/
测试访问,能确保正确看到堡垒机后台,就OK
五.部署luna前端(网页版命令行)
1. 安装luna
# 下载luna的前端源代码
mkdir -p /opt/luna-v2.12.0
wget -O /opt/luna-v2.12.0.tar.gz https://github.com/jumpserver/luna/archive/refs/tags/v2.12.0.tar.gz
tar -xf luna-2.12.0.tar.gz -C /opt/luna-v2.12.0 --strip-components 1
# 安装luna项目的前端依赖,安装依赖的时候,发现缺少如下gcc工具,安装即可
yum -y install gcc gcc-c++
# 安装前端的依赖,很容易出现问题。
执行如下2条命令。
命令一:
安装依赖,直接执行这个命令即可,会自动寻找目录下的 package.json文件,安装前端依赖信息
[root@master-61 /opt/luna-v2.12.0]#cd /opt/luna-v2.12.0
[root@master-61 /opt/luna-v2.12.0]#npm install
安装了如下1477个依赖包。
added 1477 packages from 1909 contributors in 244.312s
11 packages are looking for funding
run `npm fund` for details
命令二:
# 必须安装对应版本的 node-sass依赖,否则又是一堆报错。
# 这个命令是单独的,安装一个组件,限定了版本,这是我踩坑的解决办法,跟着操作就行。
# 你根据这个教程,部署的是v2.12.0 luna源代码,因此这个前端项目,依赖的模块,有指定的版本。
# 如果是其他的luna源码版本你或许不需要装这个操作
[root@master-61 /opt/luna-v2.12.0]#SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/
[root@master-61 /opt/luna-v2.12.0]#npm install node-sass@4.13.0
2.修改luna 的配置文件
由于luna和 core服务部署在一台机器,因此这里的地址,不用改,用localhost
如果luna和core服务,分开在不同得机器,你得填写 core机器的ip:端口
[root@master-61 /opt/luna-v2.12.0]#vim proxy.conf.json
{
"/koko": {
"target": "http://localhost:5000",
"secure": false,
"ws": true
},
"/media/": {
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
},
"/api/": {
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
},
"/core": {
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
},
"/static": {
"target": "http://localhost:8080",
"secure": false,
"changeOrigin": true
},
"/lion": {
"target": "http://localhost:9529",
"secure": false,
"pathRewrite": {
"^/lion/monitor": "/monitor"
},
"ws": true,
"changeOrigin": true
}
}
3.启动luna
安装ng命令,用于启动前端服务器,注意,必须是这个版本
# 安装这个ng命令,使用这条命令,添加--unsafe-perm参数,提权,让node的权限大一点
npm install -g @angular/cli@1.3.2 --unsafe-perm
# 确保ng命令装好,执行如下命令验证。
[root@master-61 /opt/luna-v2.12.0]#ng --version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 7.3.9
Node: 10.24.1
OS: linux x64
Angular: 7.2.15
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.13.9
@angular-devkit/build-angular 0.13.9
@angular-devkit/build-optimizer 0.13.9
@angular-devkit/build-webpack 0.13.9
@angular-devkit/core 7.3.9 (cli-only)
@angular-devkit/schematics 7.3.9 (cli-only)
@angular/cdk 7.3.7
@angular/cli 7.3.9
@angular/flex-layout 7.0.0-beta.24
@angular/material 7.3.7
@ngtools/webpack 7.3.9
@schematics/angular 7.3.9
@schematics/update 0.13.9
rxjs 6.3.3
typescript 3.2.4
webpack 4.29.0
# 后台运行命令如下,必须运行在0.0.0.0地址上,否则不通。
[root@master-61 /opt/luna-v2.12.0]#nohup ng serve --proxy-config proxy.conf.json --host 0.0.0.0 &
# 检查端口
[root@master-61 /opt/luna-v2.12.0]#netstat -tunlp|grep 4200
tcp 0 0 0.0.0.0:4200 0.0.0.0:* LISTEN 7244/@angular/cli
# 至此,luna就OK了,可以访问网页版linux命令行了。
4.测试访问luna
访问 http://10.0.0.61:4200/luna
由于这个luna版本,有点问题,v2.12.0,总是需要前端工程师配合,才能精确的调通。
这里的部署,有点bug,需要指定luna的端口才可以访问到 网页版命令行。
以及luna需要去连接koko服务,才能实现远程网页,执行linux命令。
你先确保可以看到luna的页面。
六.部署koko后端(命令行版堡垒机)
早期的命令行堡垒机,是基于coco服务,是飞致云公司,基于python开发的工具
部署python的环境,运行coco代码。
后来代码升级,基于golang重构了,换为了koko。
需要提供golang的开发环境,才能运行koko
Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。
Koko组件用于基于ssh的跳板机登录,统一管理。
jumpserver是一个 跳板机(koko)的升级版,添加了很多4A功能,完成了整个的堡垒机产品。
1.部署koko
# 下载koko代码,由于是基于golang开发,可以直接打包二进制,你无须安装了,下载即用。
mkdir /opt/koko-v2.12.0
cd /opt ; wget https://github.com/jumpserver/koko/releases/download/v2.12.0/koko-v2.12.0-linux-amd64.tar.gz
tar -xf koko-v2.12.0-linux-amd64.tar.gz -C /opt/koko-v2.12.0 --strip-components 1
2.配置golang的环境
配置golang的环境,也是下载即可,然后配置环境变量就可以用了
[root@master-61 /opt]#wget https://golang.google.cn/dl/go1.15.linux-amd64.tar.gz
[root@master-61 /opt]#tar -xf go1.15.linux-amd64.tar.gz
[root@master-61 /opt]#vi /etc/profile
export PATH=$PATH:/opt/python369/bin:/opt/node-v10.24.1/bin:/opt/go/bin
[root@master-61 /opt]#source /etc/profile
[root@master-61 /opt/go/bin]#go version
go version go1.15 linux/amd64
至此golang开发环境,go编译器已经装好
3.启动koko
# 先修改配置文件
[root@master-61 /opt/koko-v2.12.0]#cp config_example.yml config.yml
# 修改如下即可
CORE_HOST: http://127.0.0.1:8080 # Core 的地址
# 第一次运行的时候,koko会用$BOOTSTRAP_TOKEN这个值,注册当前机器的信息到jumpserver中,证明这个机器是当做了跳板机,安全验证
# 第二次运行,这个参数就给删除即可,否则会反复注册。
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
BIND_HOST: 0.0.0.0 # koko服务绑定运行在0.0.0.0上,表示可以基于10.0.0.61访问
SSHD_PORT: 2222 # 使用 0.0.0.0:2222
# 表示你可以基于ssh 协议,连接koko, 用法是 ssh root@10.0.0.61 -p 2222
# 连接22端口是 sshd进程, 连接2222是koko进程
HTTPD_PORT: 5000 # 使用 0.0.0.0:5000
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
3.具体配置如下
[root@master-61 /opt/koko-v2.12.0]#cat config.yml
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
BIND_HOST: 0.0.0.0
SSHD_PORT: 2222
HTTPD_PORT: 5000
LOG_LEVEL: DEBUG
4.运行koko服务,首次会注册到堡垒机中,以及确保2222,和5000端口都运行了,koko才是正常运行。
[root@master-61 /opt/koko-v2.12.0]#./koko -f config.yml -d
5.验证koko的运行
[root@master-61 /opt/koko-v2.12.0]#netstat -tunlp|grep -E '(5000|2222)'
tcp6 0 0 :::5000 :::* LISTEN 7613/./koko
tcp6 0 0 :::2222 :::* LISTEN 7613/./koko
6.至此,koko已经运行成功了
7.确保如下操作正常即可,说明你的koko,跳板机已经可以使用,使用的是jumpserver的用户信息
ssh admin@10.0.0.61 -p 2222
账户 admin 密码www.yuchaoit.cn
4.此时你可以试试,跳板机的实际用法了
1.访问luna的网页命令行
http://10.0.0.61:4200/luna
由于还没在堡垒机中,添加你的服务器资产数据,所以说看不到服务器列表,为了验证luna和koko结合,点击文件管理功能即可。
七.部署lion(提供vnc远程桌面功能)
1.安装guacamole
# guacamole是远程桌面依赖的一个前端框架
mkdir /opt/guacamole-v2.12.0
cd /opt/guacamole-v2.12.0
wget http://download.jumpserver.org/public/guacamole-server-1.3.0.tar.gz
tar -xzf guacamole-server-1.3.0.tar.gz
cd guacamole-server-1.3.0/
# 注意,需要安装centos的依赖环境,才可以使用这个VNC远程桌面协议。
yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel
# 编译安装
[root@master-61 /opt/guacamole-v2.12.0/guacamole-server-1.3.0]#./configure --with-init-dir=/etc/init.d
[root@master-61 /opt/guacamole-v2.12.0/guacamole-server-1.3.0]#make && make install
# 让你的linux,更新底层的驱动,加载远程桌面 guacamole协议
ldconfig
2.安装lion程序
cd /opt
wget https://github.com/jumpserver/lion-release/releases/download/v2.12.0/lion-v2.12.0-linux-amd64.tar.gz
tar -xf lion-v2.12.0-linux-amd64.tar.gz
cd lion-v2.12.0-linux-amd64
3.修改配置文件
拷贝配置文件
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#cp config_example.yml config.yml
修改配置文件,参考如下写法
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME:
# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080 # Core 的地址
# Bootstrap Token, 预共享秘钥, 用来注册使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0
# 监听的HTTP/WS端口号,默认8081
HTTPD_PORT: 8081
# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
# Guacamole Server ip, 默认127.0.0.1
# GUA_HOST: 127.0.0.1
# Guacamole Server 端口号,默认4822
# GUA_PORT: 4822
# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local
# Redis配置
# REDIS_HOST: 127.0.0.1
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_DB_ROOM:
4.启动guacd程序
/etc/init.d/guacd start
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#/etc/init.d/guacd start
Starting guacd: guacd[13422]: INFO: Guacamole proxy daemon (guacd) version 1.3.0 started
SUCCESS
5.启动lion进程
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#nohup ./lion -f config.yml &
[3] 13435
八.部署nginx
1.部署nginx
# 确保nginx安装,在大于 1.18版本即可
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
# 安装nginx
yum install nginx -y
# 配置nginx虚拟主机文件,实现整合所有jumpserver的组件,统一访问入口,如
jumpserver.linux0224.cc 默认80端口即可。
2.配置nginx
cd /etc/nginx/conf.d/
[root@master-61 /etc/nginx/conf.d]#rm -f default.conf
vim jumpserver.conf
server {
listen 80;
# 不做域名解析,基于ip:port直接访问
client_max_body_size 5000m;
# Luna 配置
# 经过实测,这个v12版本,只能http://10.0.0.61:4200/luna/这样去访问,前端这里有点难处理。
location /luna/ {
proxy_pass http://luna:4200;
}
# Core data 静态资源
location /media/replay/ {
add_header Content-Encoding gzip;
root /opt/jumpserver-v2.12.0/data/;
}
location /media/ {
root /opt/jumpserver-v2.12.0/data/;
}
location /static/ {
root /opt/jumpserver-v2.12.0/data/;
}
# KoKo Lion 配置
location /koko/ {
proxy_pass http://koko:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# lion 配置
location /lion/ {
proxy_pass http://lion:8081;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 6000;
}
# Core 配置
location /ws/ {
proxy_pass http://core:8070;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/ {
proxy_pass http://core:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /core/ {
proxy_pass http://core:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 前端 Lina
location /ui/ {
proxy_pass http://lina:9528;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
rewrite ^/(.*)$ /ui/$1 last;
}
}
注意,配置文件中用的都是测试域名,你要在master-61上做好hosts解析
10.0.0.61 luna koko lion core lina
最后,启动nginx,访问入口
[root@master-61 /etc/nginx/conf.d]#nginx -t
[root@master-61 /etc/nginx/conf.d]#nginx
访问入口是: http://10.0.0.61:80
标签:opt,部署,实践,jumpserver,61,master,v2.12,root
From: https://www.cnblogs.com/chunjeh/p/17681107.html