jumpserver 2.2 安装教程

有问题可联系本人QQ:1016401546,备注来意,否则不加

参考链接:
https://docs.jumpserver.org/zh/master/install/step_by_step/
https://www.jianshu.com/p/7d5633223210
一、简介
jumpserver 概述
Jumpserver 是一款使用 Python, Django 开发的开源跳板机系统, 为互联网企业提供了认证,授权,审计,自动化运维等功能,基于ssh协议来管理,客户端无需安装agent。
jumpserver 的功能特点
    完全开源,GPL授权
    Python编写,容易再次开发
    实现了跳板机基本功能,身份认证、访问控制、授权、审计 、批量操作等。
    集成了Ansible,批量命令等
    支持WebTerminal
    Bootstrap编写,界面美观
    自动收集硬件信息
    录像回放
    命令搜索
    实时监控
    批量上传下载
二、安装
安装jumpserver 3.0版本,相对于jumpserver 2.0版本,在新的版本3.0中取消了LDAP授权,取而代之的是ssh进行推送;界面也有所变化,功能更完善,安装更简单。
该文档参照官方文档安装的是jumpserver 2.2


1、环境配置
1.1关闭jumpserver部署机的防火墙和selinux

[root@vm ~]# getenforce
Disabled
[root@vm ~]# systemctl stop firewalld.service

1.2修改字符集
如果用的云服务器,云服务器默认是英文字符集。否则可能报 input/output error的问题,因为日志里打印了中文

[root@vm ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@vm ~]# export LC_ALL=zh_CN.UTF-8
[root@vm ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf


1.3安装依赖包

[root@vm ~]# yum -y install epel-release
[root@vm ~]# yum clean all && yum makecache
[root@vm ~]# yum -y update
[root@vm ~]# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git

1.4编译安装python-3.6.1

[root@vm ~]# wget https://mirrors.huaweicloud.com/python/3.6.1/Python-3.6.1.tar.xz
[root@vm ~]# tar xf Python-3.6.1.tar.xz  && cd Python-3.6.1
[root@vm Python-3.6.1]#  ./configure && make && make install


这里必须执行编译安装,否则在安装 Python 库依赖时会有麻烦...​

[root@vm Python-3.6.1]# cd /opt
创建虚拟环境
[root@vm opt]# python3 -m venv py3
进入虚拟环境
[root@vm opt]# source /opt/py3/bin/activate
(py3) [root@vm opt]#

注意:每次操作 JumpServer 都需要先载入 py3 虚拟环境2、下载Jumpserver
2.1 下载jumpserver项目

(py3) [root@vm ~]# cd /opt/
(py3) [root@vm opt]# wget https://github.com/jumpserver/jumpserver/releases/download/v2.2.2/jumpserver-v2.2.2.tar.gz
(py3) [root@vm opt]# tar xf jumpserver-v2.2.2.tar.gz
(py3) [root@vm opt]# mv jumpserver-v2.2.2 jumpserver
(py3) [root@vm opt]# cd /opt/jumpserver/requirements
(py3) [root@vm requirements]# yum install -y $(cat rpm_requirements.txt)
#-i 使用国内源快速安装
(py3) [root@vm requirements]# pip install wheel -i https://mirrors.aliyun.com/pypi/simple/
(py3) [root@vm requirements]# pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
(py3) [root@vm requirements]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/


2.2 安装Redis
#如果已经有redis就不需要安装了,或者使用编译安装最新版的redis也行

(py3) [root@vm requirements]#  yum -y install redis
(py3) [root@vm requirements]#  systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
(py3) [root@vm requirements]# systemctl start redis

2.3 安装MySQL
如果已经有了MySQL 就不需要安装了,或者使用编译安装的也行。我使用的是编译安装的MySQL8.0(具体安装百度)。

(py3) [root@vm requirements]# yum -y install mariadb mariadb-devel mariadb-server
(py3) [root@vm requirements]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
(py3) [root@vm requirements]# systemctl start mariadb
(py3) [root@vm requirements]#

2.4 创建jumpserver数据库并授权
mysql建议还是使用最新版的,低版本线上容易扫出漏洞。

MySQL5 授权方式:
MariaDB [(none)]>  create database jumpserver default charset 'utf8';
​设置用户[email protected]对jumpserver数据库所有表都有权限,并设置密码为123456
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '123456';​
MariaDB [(none)]> flush privileges;

MySQL8.0 授权方式:
mysql> create database jumpserver default charset 'utf8';
#创建jumpserver用户,并设置密码123456,线上可以设置复杂点
mysql> CREATE USER 'jumpserver'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON jumpserver.* TO jumpserver@'%';
#注意:MySQL 8.0 必须还要给第三方登录的授权,否则jumpserver无法连接mysql
mysql> alter user jumpserver identified with mysql_native_password by '123456';
mysql> flush prilievges


3、配置Jumpserver
# 主要修改SECRET_KEY,BOOTSTRAP_TOKEN,MySQL配置,Redis配置

(py3) [root@vm jumpserver]# cd /opt/jumpserver 
(py3) [root@vm jumpserver]# cp config_example.yml config.yml 
(py3) [root@vm jumpserver]# vi config.yml
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: W5Ic3fMXNZ0p5RIy5DhJYJllppTfcfkW8Yuf94VBMfpcssbfu
# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
# 可使用命令生成
# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16;echo
BOOTSTRAP_TOKEN: zxffNymGjP79j6BN
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
#MySQL密码必须要用单引号括起来,否则启动jumpserver报错
DB_PASSWORD: '123456'
DB_NAME: jumpserver
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
#如果redis设置了密码需要打开这个注释,redis密码可以不需要单引号
REDIS_PASSWORD: 123456

注意:mysql配置密码要加上单引号!否则启动不起来。

4、启动/关闭Jumpserver

#前台启动
(py3) [root@vm jumpserver]# ./jms start  
......
​#后台启动
(py3) [root@vm jumpserver]# ./jms start -d
(py3) [root@vm jumpserver]# ./jms stop     --这个停止只是演示,安装完jumpserver就可以直接启动了。
Stop service: gunicorn
Stop service: celery
Stop service: beat

5、部署koko
5.1 手工部署koko (coco 目前已经被 koko 取代)

(py3) [root@vm jumpserver]# cd /opt 
(py3) [root@vm opt]# wget https://github.com/jumpserver/koko/releases/download/v2.2.2/koko-v2.2.2-linux-amd64.tar.gz
(py3) [root@vm opt]# tar -xf koko-v2.2.2-linux-amd64.tar.gz 
(py3) [root@vm opt]# mv koko-v2.2.2-linux-amd64 koko 
(py3) [root@vm opt]# chown -R root:root koko 
(py3) [root@vm opt]# cd koko 
(py3) [root@vm opt]# mv kubectl /usr/local/bin/ 
(py3) [root@vm opt]# wget https://download.jumpserver.org/public/kubectl.tar.gz 
(py3) [root@vm opt]# tar -xf kubectl.tar.gz && \
(py3) [root@vm opt]# chmod 755 kubectl && \
(py3) [root@vm opt]# mv kubectl /usr/local/bin/rawkubectl && \
(py3) [root@vm opt]# rm -rf kubectl.tar.gz
(py3) [root@vm opt]# cp config_example.yml config.yml && \
(py3) [root@vm opt]# vi config.yml
#主要修改和redis配置
#BOOTSTRAP_TOKEN 和jumpserver配置一样
BOOTSTRAP_TOKEN: zxffNymGjP79j6BN
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD: 123456


koko启停:

前台启动:
./koko  
后台启动:
./koko -d


5.2 Docker 部署 KoKo 组件
如果前面已经正常部署了 KoKo, 可以跳过此步骤
例子:

docker run --name jms_koko -d \
  -p 2222:2222 -p 127.0.0.1:5000:5000 \
  -e CORE_HOST=http:// \
  -e BOOTSTRAP_TOKEN= \
  -e LOG_LEVEL=ERROR \
  --restart=always \
  --privileged=true \
  jumpserver/jms_koko:
 为 jumpserver 的 url 地址,  需要从 jumpserver/config.yml 里面获取, 保证一致,  是版本

实例:

docker run --name jms_koko -d \
  -p 2222:2222 \
  -p 127.0.0.1:5000:5000 \
  -e CORE_HOST=http://192.168.244.144:8080 \
  -e BOOTSTRAP_TOKEN=zxffNymGjP79j6BN \
  -e LOG_LEVEL=ERROR \
  --privileged=true \
  --restart=always \
  jumpserver/jms_koko:v2.2.2


查看启动成功:

(py3) [root@vm opt]# docker ps 
停止docker的koko
docker stop  上面查出的容器ID
启动docker
docker start 容器ID

6、部署guacamole
方式1:通过docker部署(推荐)

基于 HTML 5 和 JavaScript 的 VNC 查看器
建议使用 Docker 部署 Guacamole 组件 , 部分环境可能无法正常编译安装

docker run --name jms_guacamole -d \
  -p 127.0.0.1:8081:8080 \
  -e JUMPSERVER_SERVER=http:// \
  -e BOOTSTRAP_TOKEN= \
  -e GUACAMOLE_LOG_LEVEL=ERROR \
  jumpserver/jms_guacamole:
 为 JumpServer 的 url 地址,  需要从 jumpserver/config.yml 里面获取, 保证一致,  是版本

实例:

docker run --name jms_guacamole -d \
  -p 127.0.0.1:8081:8080 \
  -e JUMPSERVER_SERVER=http://192.168.244.144:8080 \
  -e BOOTSTRAP_TOKEN=abcdefg1234 \
  -e GUACAMOLE_LOG_LEVEL=ERROR \
  jumpserver/jms_guacamole:v2.2.2


方式2:手工部署guacamole(如果docker弄好了就忽略这步)
建议使用 Docker 部署 Guacamole 组件 , 部分环境可能无法正常编译安装

cd /opt && \
wget -O docker-guacamole-v2.2.2.tar.gz https://github.com/jumpserver/docker-guacamole/archive/master.tar.gz

mkdir /opt/docker-guacamole && \
tar -xf docker-guacamole-v2.2.2.tar.gz -C /opt/docker-guacamole --strip-components 1 && \
rm -rf /opt/docker-guacamole-v2.2.2.tar.gz && \
cd /opt/docker-guacamole && \
wget http://download.jumpserver.org/public/guacamole-server-1.2.0.tar.gz && \
tar -xf guacamole-server-1.2.0.tar.gz && \
wget http://download.jumpserver.org/public/ssh-forward.tar.gz && \
tar -xf ssh-forward.tar.gz -C /bin/ && \
chmod +x /bin/ssh-forward

cd /opt/docker-guacamole/guacamole-server-1.2.0

根据 Guacamole官方文档 文档安装对应的依赖包

./configure --with-init-dir=/etc/init.d && \
make && \
make install


需要先在当前环境配置好 Java

yum install -y java-1.8.0-openjdk
mkdir -p /config/guacamole /config/guacamole/extensions /config/guacamole/record /config/guacamole/drive && \
chown daemon:daemon /config/guacamole/record /config/guacamole/drive && \
cd /config
访问  https://mirror.bit.edu.cn/apache/tomcat/tomcat-9下载最新的 Tomcat9
tar -xf apache-tomcat-9.0.36.tar.gz && \
mv apache-tomcat-9.0.36 tomcat9 && \
rm -rf /config/tomcat9/webapps/* && \
sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.xml && \
echo "java.util.logging.ConsoleHandler.encoding = UTF-8" >> /config/tomcat9/conf/logging.properties && \
wget http://download.jumpserver.org/release/v2.2.2/guacamole-client-v2.2.2.tar.gz && \
tar -xf guacamole-client-v2.2.2.tar.gz && \
rm -rf guacamole-client-v2.2.2.tar.gz && \
cp guacamole-client-v2.2.2/guacamole-*.war /config/tomcat9/webapps/ROOT.war && \
cp guacamole-client-v2.2.2/guacamole-*.jar /config/guacamole/extensions/ && \
mv /opt/docker-guacamole/guacamole.properties /config/guacamole/ && \
rm -rf /opt/docker-guacamole && \
设置 Guacamole 环境
export JUMPSERVER_SERVER=http://127.0.0.1:8080
echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
export BOOTSTRAP_TOKEN=zxffNymGjP79j6BN
echo "export BOOTSTRAP_TOKEN=zxffNymGjP79j6BN" >> ~/.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
export GUACAMOLE_LOG_LEVEL=ERROR
echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
export JUMPSERVER_ENABLE_DRIVE=true
echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc

启动 Guacamole
/etc/init.d/guacd start
sh /config/tomcat9/bin/startup.sh

环境变量说明
JUMPSERVER_SERVER 指 core 访问地址
BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN 值
JUMPSERVER_KEY_DIR 认证成功后 key 存放目录
GUACAMOLE_HOME 为 guacamole.properties 配置文件所在目录
GUACAMOLE_LOG_LEVEL 为生成日志的等级
JUMPSERVER_ENABLE_DRIVE 为 rdp 协议挂载共享盘

7、部署lina组件

我nginx用root启动的,所以赋权root

cd /opt
wget https://github.com/jumpserver/lina/releases/download/v2.2.2/lina-v2.2.2.tar.gz
tar -xf lina-v2.2.2.tar.gz
mv lina-v2.2.2 lina
chown -R root:root lina

8、部署luna组件
与nginx结合支持Web Terminal前端,我nginx用root启动的,所以赋权root

cd /opt
wget https://github.com/jumpserver/luna/releases/download/v2.2.2/luna-v2.2.2.tar.gz
tar -xf luna-v2.2.2.tar.gz
mv luna-v2.2.2 luna
chown -R root:root luna

9、安装和配置nginx
我使用的是编译安装的nginx,主配置文件:nginx.conf,子配置文件再conf/vhost里面,这种方式比较适用线上配置,官网的配置是清空default,再直接配置一个jumpserver子配置,简单,适合新手。
主配置文件:

[root@vm jumpserver]# cat /usr/local/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
      server
        {
                listen 80;
                server_name empty;
                root /data/web;

        }


include vhost/*.conf;
}

子配置文件:

[root@vm jumpserver]# vi /usr/local/nginx/conf/vhost/jumpserver.conf 
server {
    listen 80;
    server_name 192.168.244.144
    client_max_body_size 100m;  # 录像及文件上传大小限制

    location /ui/ {
        try_files $uri / /index.html;
        alias /opt/lina/;
    }

    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/;  # 静态资源, 如果修改安装目录, 此处需要修改
    }

    location /koko/ {
        proxy_pass       http://localhost:5000;
        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 /guacamole/ {
        proxy_pass       http://localhost:8081/;
        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 /ws/ {
        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_pass http://localhost:8070;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /api/ {
        proxy_pass http://localhost: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://localhost: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 / {
        rewrite ^/(.*)$ /ui/$1 last;
    }
}

[root@vm nginx]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@vm nginx]# /usr/local/nginx/sbin/nginx

10、Jumpserver 登录测试
检查应用是否已经正常运行
服务全部启动后, 访问 jumpserver 服务器 nginx 代理的 80 端口, 不要通过8080端口访问,否则无法访问到静态资源。
默认账号: admin 密码: admin

 

 

你可能感兴趣的:(jumpserver,jumpserver,jumpserver部署安装,jumpserver2,部署,堡垒机部署)