jumpserver部署实践

发布时间 2023-09-05 23:00:38作者: 村尚chun叔

jumpserver部署实践

当前选择的版本是
https://docs.jumpserver.org/zh/v2.12.0/install/setup_by_fast/

这种开源工具,没必要追求太新的,功能太多,用不上,且部署繁琐。
虽提供了docker部署,暂时先不用。

1. 基础组件

image

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.架构图

image

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