有问题可联系本人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