Jumpserver堡垒机搭建
系统: centos 7 ip: 192.168.11.199
关闭 selinux 和防火墙
# setenforce 0 # 临时关闭,重启后失效
# systemctl stop firewalld.service # 临时关闭,重启后失效
修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文
# 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
一. 准备 python3 和 python 虚拟环境
1.1 安装依赖包
# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
1.2 编译安装
# wget https://www.python.org/ftp/python/3.6.1/python-3.6.1.tar.xz
# tar xvf python-3.6.1.tar.xz && cd python-3.6.1
# ./configure && make && make install
1.3 建立 python 虚拟环境
# cd /opt
# python3 -m venv py3
# source /opt/py3/bin/activate
1.4 自动载入 python 虚拟环境配置
# cd /opt
# git clone https://github.com/kennethreitz/autoenv.git
# echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
# source ~/.bashrc
二. 安装 jumpserver
2.1 下载或 clone 项目
# cd /opt/
# git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master
# echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env # 进入 jumpserver 目录时将自动载入 python 虚拟环境
2.2 安装依赖 rpm 包
# cd /opt/jumpserver/requirements
# yum -y install $(cat rpm_requirements.txt) # 如果没有任何报错请继续
2.3 安装 python 库依赖
# pip install -r requirements.txt
2.4 安装 redis, jumpserver 使用 redis 做 cache 和 celery broke
# yum -y install redis
# systemctl enable redis
# systemctl start redis
2.5 安装 mysql
# yum -y install mariadb mariadb-devel mariadb-server # centos7下安装的是mariadb
# systemctl enable mariadb
# systemctl start mariadb
# mysql_secure_installation #设置mysql密码,比如密码设置为123456
2.6 创建数据库 jumpserver 并授权
# mysql -p123456
> create database jumpserver default charset 'utf8';
> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '123456';
> flush privileges;
2.7 修改 jumpserver 配置文件
# cd /opt/jumpserver
# cp config_example.py config.py
# vi config.py
# 注意对齐,不要直接复制本文档的内容,实际内容以文件为准
注意: 配置文件是 python 格式,不要用 tab,而要用空格
修改:
# secret_key = os.environ.get('secret_key') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x'
secret_key = '请随意输入随机字符串(推荐字符大于等于 50位)'
# 日志级别,默认为debug,可调整为info, warning, error, critical,默认info
log_level = os.environ.get("log_level") or 'warning'
log_dir = os.path.join(base_dir, 'logs')
# 使用的数据库配置,支持sqlite3, mysql, postgres等,默认使用sqlite3
# see https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# 默认使用sqlite3,如果使用其他数据库请注释下面两行
# db_engine = 'sqlite3'
# db_name = os.path.join(base_dir, 'data', 'db.sqlite3')
# 如果需要使用mysql或postgres,请取消下面的注释并输入正确的信息,本例使用mysql做演示(mariadb也是mysql)
db_engine = os.environ.get("db_engine") or 'mysql'
db_host = os.environ.get("db_host") or '127.0.0.1'
db_port = os.environ.get("db_port") or 3306
db_user = os.environ.get("db_user") or 'jumpserver'
db_password = os.environ.get("db_password") or '123456'
db_name = os.environ.get("db_name") or 'jumpserver'
2.8 生成数据库表结构和初始化数据
# cd /opt/jumpserver/utils
# bash make_migrations.sh
2.9 运行 jumpserver
# cd /opt/jumpserver
# ./jms start all # 后台运行使用 -d 参数./jms start all -d
运行不报错,请浏览器访问 http://192.168.11.199:8080/ 默认账号: admin 密码: admin
三. 安装 ssh server 和 websocket server: coco
3.1 下载或 clone 项目
新开一个终端,别忘了 source /opt/py3/bin/activate
# cd /opt
# source /opt/py3/bin/activate
# git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master
# echo "source /opt/py3/bin/activate" > /opt/coco/.env # 进入 coco 目录时将自动载入 python 虚拟环境
3.2 安装依赖
# cd /opt/coco/requirements
# yum -y install $(cat rpm_requirements.txt)
# pip install -r requirements.txt
3.3 修改配置文件并运行
# cd /opt/coco
# mkdir keys
# cp conf_example.py conf.py # 如果 coco 与 jumpserver 分开部署,请手动修改 conf.py
# vi conf.py
# 注意对齐,不要直接复制本文档的内容
注意: 配置文件是 python 格式,不要用 tab,而要用空格
修改:
# name = "localhost"
name = "coco"
# jumpserver项目的url, api请求注册会使用, 如果jumpserver没有运行在127.0.0.1:8080,请修改此处
# core_host = os.environ.get("core_host") or 'http://127.0.0.1:8080'
core_host = 'http://127.0.0.1:8080'
# 设置日志级别 ['debug', 'info', 'warn', 'error', 'fatal', 'critical']
# log_level = 'info'
log_level = 'warn'
# ./cocod start # 后台运行使用 -d 参数./cocod start -d
# 新版本更新了运行脚本,使用方式./cocod start|stop|status|restart 后台运行请添加 -d 参数
启动成功后去jumpserver 会话管理-终端管理(http://192.168.11.199:8080/terminal/terminal/)接受coco的注册
四. 安装 web terminal 前端: luna
luna 已改为纯前端,需要 nginx 来运行访问
4.1 解压 luna
# cd /opt
# wget https://github.com/jumpserver/luna/releases/download/1.4.3/luna.tar.gz
# tar xvf luna.tar.gz
# chown -r root:root luna
五. 安装 windows 支持组件(如果不需要管理 windows 资产,可以直接跳过这一步)
因为手动安装 guacamole 组件比较复杂,这里提供打包好的 docker 使用, 启动 guacamole
5.1 docker安装 (仅针对centos7,centos6安装docker相对比较复杂)
# yum remove docker-latest-logrotate docker-logrotate docker-selinux dockdocker-engine
# yum install -y yum-utils device-mapper-persistent-data lvm2
#
# 添加docker官方源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum makecache fast
# yum install docker-ce
# 国内部分用户可能无法连接docker官网提供的源,这里提供阿里云的镜像节点供测试使用
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg
# yum makecache fast
# yum -y install docker-ce
#
# systemctl start docker
# systemctl status docker
5.2 启动 guacamole
这里所需要注意的是 guacamole 暴露出来的端口是 8081,若与主机上其他端口冲突请自定义
# docker run --name jms_guacamole -d \
-p 8081:8080 -v /opt/guacamole/key:/config/guacamole/key \
-e jumpserver_key_dir=/config/guacamole/key \
-e jumpserver_server=http://<填写jumpserver的url地址> \
jumpserver/guacamole:latest
启动成功后去jumpserver 会话管理-终端管理(http://192.168.11.199:8080/terminal/terminal/)接受[gua]开头的一个注册
六. 配置 nginx 整合各组件
# yum -y install nginx
6.2 准备配置文件 修改 /etc/nginx/conf.d/jumpserver.conf
# vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80; # 代理端口,以后将通过此端口进行访问,不再通过8080端口
server_name demo.jumpserver.org; # 修改成你的域名
client_max_body_size 100m; # 录像及文件上传大小限制
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 /socket.io/ {
proxy_pass http://192.168.11.199:5000/socket.io/; # 如果coco安装在别的服务器,请填写它的ip
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 /coco/ {
proxy_pass http://192.168.11.199:5000/coco/; # 如果coco安装在别的服务器,请填写它的ip
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://192.168.11.199:8081/; # 如果guacamole安装在别的服务器,请填写它的ip
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 / {
proxy_pass http://192.168.11.199:8080; # 如果jumpserver安装在别的服务器,请填写它的ip
proxy_set_header x-real-ip $remote_addr;
proxy_set_header host $host;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
}
}
6.3 运行 nginx
# nginx -t # 确保配置没有问题, 有问题请先解决
# systemctl start nginx
# systemctl enable nginx
6.4 开始使用 jumpserver
检查应用是否已经正常运行
# cd /opt/jumpserver
# ./jms status # 确定jumpserver已经运行,如果没有运行请重新启动jumpserver
# cd /opt/coco
# ./cocod status # 确定jumpserver已经运行,如果没有运行请重新启动coco
# 如果安装了 guacamole
# docker ps # 检查容器是否已经正常运行,如果没有运行请重新启动guacamole
服务全部启动后,访问 http://192.168.11.199,访问nginx代理的端口,不要再通过8080端口访问
默认账号: admin 密码: admin
如果部署过程中没有接受应用的注册,需要到jumpserver 会话管理-终端管理 接受 coco guacamole 等应用的注册。
测试连接
如果登录客户端是 macos 或 linux ,登录语法如下
# ssh -p2222 admin@192.168.11.199
# sftp -p2222 admin@192.168.11.199
密码: admin
如果登录客户端是 windows ,xshell terminal 登录语法如下
# ssh admin@192.168.11.199 2222
# sftp admin@192.168.11.199 2222
密码: admin
xshell登录通过堡垒机登录:
新建连接(堡垒机ip和密码)——>用户身份验证(系统普通用户)