jumpserver的介绍

为了保证服务器安全,加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有身份认证,授权,访问控制,审计等功能。

Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。

支持常见系统:

CentOS, RedHat, Fedora, Amazon Linux,Debian,SUSE, Ubuntu,FreeBSD
其他ssh协议硬件设备

Jumpserver 后端主要技术是LDAP,配置了LDAP 集中认证服务器, 所有服务器的认证都是由ldap完成的。其做法是:每个用户一个密码,把密码加密放到了数据库中,当用户输入IP 从跳板机登陆服务器的时候,跳板机系统取出密码,并解密,通过pexpect 模块将密码发送过去,来完成登录。

架构图如下

Jumpserver 是完全开源的项目,安全,透明,免费,方便二次开发;因为jumpserver本身已包含大部分跳板机的功能,一些中小型企业可以直接安装并使用;

基于代码开源的情况,有技术实力的团队可以根据其源码进行适合自己的二次开发;

由于其拥有时尚的外观和直观的功能以及简单地安装配置等特色,是步入自动化运维的不二选择;其后端数据存储使用的是MySQL数据库,因此建议使用前先行配置及部署好MySQL数据库。

通过web端登录系统后界面如下:

特点介绍

Jumpserver拥有以下特点:

完全开源,GPL授权
Python编写,容易再次开发
实现了跳板机基本功能,认证、授权、审计
集成了Ansible,批量命令等
支持WebTerminal
Bootstrap编写,界面美观
自动收集硬件信息
录像回放
命令搜索
实时监控
批量上传下载

基于其特点,Jumpserver能够实现跳板机常见需求,如授权、用户管理、服务器基本信息记录等,同时又可批量执行脚本等功能;其中录像回放、命令搜索、实时监控等特点,又能帮助运维人员回溯操作历史,方便查找操作痕迹,便于管理其他人员对服务器的操作控制。

部署Jumpserver环境

官网推荐安装环境

操作系统: Centos7

CPU: 64位双核处理器

内存: 4G DDR3

数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6

1、搭建环境前期准备

[root@ansible ~]# systemctl stop firewalld
[root@ansible ~]# iptables -F
[root@ansible ~]# setenforce 0
[root@ansible ~]# hostname jumpserver
[root@ansible ~]# bash

2、准备Python3Python虚拟环境

[root@jumpserver ~]# yum install wget gcc git -y

[root@jumpserver ~]# rz

[root@jumpserver ~]# rpm -ivh epel-release-latest-7.noarch.rpm
警告:epel-release-latest-7.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:epel-release-7-11 ################################# [100%]
[root@jumpserver ~]# cd /etc/yum.repos.d/
[root@jumpserver yum.repos.d]# mv a/CentOS-Base.repo ./
[root@jumpserver yum.repos.d]# cd

安装 Python3.6

[root@jumpserver ~]# yum -y install python36 python36-devel python-pip

建立 Python 虚拟环境

因为 CentOS 7 自带的是 Python2,Yum 等工具依赖原来的 Python, 为了不扰乱原来的环境我们来使用 Python虚拟环境

[root@jumpserver ~]# cd /opt/

[root@jumpserver opt]# python3.6 -m venv py3
[root@jumpserver opt]# source /opt/py3/bin/activate

3、安装Jumpserver

下载或 Clone 项目

(py3) [root@jumpserver opt]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
正克隆到 'jumpserver'...
remote: Enumerating objects: 1210, done.
remote: Counting objects: 100% (1210/1210), done.
remote: Compressing objects: 100% (1083/1083), done.
remote: Total 1210 (delta 197), reused 633 (delta 65), pack-reused 0
接收对象中: 100% (1210/1210), 7.19 MiB | 65.00 KiB/s, done.
处理 delta 中: 100% (197/197), done.

安装依赖 RPM

(py3) [root@jumpserver opt]# cd jumpserver/requirements/

(py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt)

安装 Python 库依赖

(py3) [root@jumpserver requirements]# pip install --upgrade pip setuptools

(py3) [root@jumpserver requirements]# pip install -r requirements.txt

安装 Redis, Jumpserver 使用 Redis cache celery broke

(py3) [root@jumpserver requirements]# yum -y install redis

(py3) [root@jumpserver requirements]# systemctl start redis
(py3) [root@jumpserver requirements]# systemctl enable redis

4、安装 MySQL

(py3) [root@jumpserver requirements]# yum install mariadb mariadb-server mariadb-devel -y

(py3) [root@jumpserver requirements]# systemctl restart mariadb
(py3) [root@jumpserver requirements]# systemctl enable mariadb

创建数据库 Jumpserver 并授权生成随机数据库密码

(py3) [root@jumpserver requirements]# DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`
(py3) [root@jumpserver requirements]# echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m"
你的数据库密码是 VugcsJK6jq8wRpsAVUQTPvPs
(py3) [root@jumpserver requirements]# mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;"

5、修改 Jumpserver 配置文件

(py3) [root@jumpserver requirements]# cd /opt/jumpserver
(py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml

生成随机SECRET_KEY

(py3) [root@jumpserver jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
(py3) [root@jumpserver jumpserver]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc

生成随机BOOTSTRAP_TOKEN

(py3) [root@jumpserver jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
(py3) [root@jumpserver jumpserver]# echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

修改配置文件内容:

(py3) [root@jumpserver jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver jumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
(py3) [root@jumpserver jumpserver]# echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"
你的SECRET_KEY是 Un5Nkaf4WLyPwzm7lEIbOgvG8vrJvxU6F78zWr9LvKBMkONza6
(py3) [root@jumpserver jumpserver]# echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"
你的BOOTSTRAP_TOKEN是 2lv07mBOr6hD6XwV

确认内容有没有错误

(py3) [root@jumpserver jumpserver]# vim config.yml

# SECURITY WARNING: keep the secret key used in production secret!

# 加密秘钥 生产环境中请修改为随机字符串, 请勿外泄

SECRET_KEY:

# SECURITY WARNING: keep the bootstrap token used in production secret!

# 预共享Token cocoguacamole用来注册服务账号, 不在使用原来的注册接受机制

BOOTSTRAP_TOKEN:

# Development env open this, when error occur display the full process track, Production disable it

# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志

DEBUG: false

# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/

# 日志级别

LOG_LEVEL: ERROR

# LOG_DIR:

# Session expiration setting, Default 24 hour, Also set expired on on browser close

# 浏览器Session过期时间, 默认24小时, 也可以设置浏览器关闭则过期

# SESSION_COOKIE_AGE: 86400

SESSION_EXPIRE_AT_BROWSER_CLOSE: true

# Database setting, Support sqlite3, mysql, postgres ....

# 数据库设置

# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases

# SQLite setting:

# 使用单文件sqlite数据库

# DB_ENGINE: sqlite3

# DB_NAME:
# MySQL or postgres setting like:
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD:
DB_NAME: jumpserver

# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 运行时绑定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080

# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4

# Use OpenID authorization
# 使用OpenID 来进行认证设置
# BASE_SITE_URL: http://localhost:8080
# AUTH_OPENID: false  # True or False
# AUTH_OPENID_SERVER_URL: https://openid-auth-server.com/
# AUTH_OPENID_REALM_NAME: realm-name
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret

# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver

6、运行 Jumpserver

新版本更新了运行脚本,使用方式./jms start|stop|status all  后台运行添加 -d 参数

(py3) [root@jumpserver jumpserver]# ./jms start all -d

7、安装 SSH Server WebSocket Server: Coco

下载或 Clone 项目

(py3) [root@jumpserver jumpserver]# cd /opt/
(py3) [root@jumpserver opt]# source /opt/py3/bin/activate
(py3) [root@jumpserver opt]# git clone --depth=1 https://github.com/jumpserver/coco.git

正克隆到 'coco'...
remote: Enumerating objects: 156, done.
remote: Counting objects: 100% (156/156), done.
remote: Compressing objects: 100% (134/134), done.
remote: Total 156 (delta 17), reused 106 (delta 12), pack-reused 0
接收对象中: 100% (156/156), 1.05 MiB | 42.00 KiB/s, done.
处理 delta 中: 100% (17/17), done.

安装依赖

(py3) [root@jumpserver opt]# cd /opt/coco/requirements
(py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt)

(py3) [root@jumpserver requirements]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

12-29 13:27