一、jumpserver概述
jumpserver是全球首款完全开源的堡垒机,使用Python/django进行开发,遵循GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal,交互美观,支持分布式架构,可以对多机房跨区域部署。jumpserver好比是军事界的瑞士军刀,可以将我们的运维管理水平提高到一个专业的水平,如果说仍然还采用CRT或者Xshell进行批量管理的你,jumpserver无疑是雪中送炭。
1、jumpserver架构说明
组件说明:
(1)、Jumpserver:jumpserver是管理后台,是核心组件(Core), 使用 Django Class Based View 风格开发,支持 Restful API,是jumpserver系统的核心管理终端
(2)、Coco:实现了SSH Server 和 Web Terminal Server 的组件,提供SSH和 WebSocket 接口,使用 Paramiko和Flask开发,是web页面实现SSH的关键组件,在最近的版本中,采用了koko替换了coco,但其作用是一致的
(3)、Guacamole:Jumpserver 使用其组件实现 RDP 功能,Jumpserver 并没有修改其代码而是添加了额外的插件,支持 Jumpserver 调用。在这里的作用是采集Windows资产信息,如果你管理的资产中不涉及windows可以忽略(建议进行安装)
(4)、Luna:现在是 Web Terminal 前端,计划前端页面都由该项目提供,Jumpserver 只提供 API,不再负责后台渲染html等,采用Luna的页面简单美观
(5)、NGINX:WEB服务软件,采用了动静分离的思想,NGINX自身擅长对静态资源的处理(Luna),对于接口以及websocket实现反向代理,是强大的web服务器软件
(6)、DB:采用内置yum安装MySQL,其搭建过程并不在文章中体现,对于本文搭建jumpserver,其实就是用到了db的连接信息
二、安装环境:
系统: CentOS 7.4
IP: 172.16.29.80(购买的阿里云ECS)
设置 selinux 和防火墙
1、关闭防火墙
$ systemctl stop firewall
设置开机不启动防火墙
$ systemctl disable firewalld
2、关闭selinux
$ setenforce 0
$ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3、#修改字符集,否则可能报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
4、准备Python环境
$ yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
$ mv Python-3.6.1.tar.xz /usr/src && cd /usr/src/ && tar xvf Python-3.6.1.tar.xz && cd Python-3.6.1
$ ./configure && make && make install
以上是采用源码安装的方式进行Python3.6的安装,也可以yum安装Python3.6环境,如下:
$ yum -y install python36 python36-devel
如果下载速度很慢, 可以换国内源
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum -y install python36 python36-devel
准备Python的虚拟环境
$ cd /opt
$ python3.6 -m venv py3
$ source /opt/py3/bin/activate
看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行
(py3) [[email protected] py3]
三、安装jumpserver
网上安装配置jumpserver的比较多,但本文以官网为参考依据,但官网部署采用方式,对于github的访问存在一些问题,慢速极慢。因此先解决github满的问题,解决方案比较多,但比较靠谱的推荐镜像中转,本文推荐码云中转。
官网安装文档地址:https://jumpserver.readthedocs.io/zh/master/setup_by_localcloud.html,文章中使用的jumpserver的git地址为https://github.com/jumpserver/jumpserver.git ,以此为例子,解决git clone慢的问题
1、码云中转解决git clone慢的问题
注册一个码云账号:https://gitee.com/
下图是jumpserver在github的地址,复制一下https地址
在码云的工作台,点击新建仓库
导入已有仓库,即jumpserver在github的地址
后面在安装jumpserver的时候将github地址修改为国内镜像地址,我中转在码云的公开jumpserver地址:https://gitee.com/yunwen_1_hlzhang/jumpserver.git
2、安装jumpserver
过程参考jumpserver安装官方文档,此处不做一一
(1)以下过程可以直接执行
&& yum update -y && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum -y install kde-l10n-Chinese && 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 && yum -y install wget gcc epel-release git && yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum makecache fast && rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg && echo -e "[nginx-stable]\nname=nginx stable repo\nbaseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/\ngpgcheck=1\nenabled=1\ngpgkey=https://nginx.org/keys/nginx_signing.key" > /etc/yum.repos.d/nginx.repo && rpm --import https://nginx.org/keys/nginx_signing.key && yum -y install redis mariadb mariadb-devel mariadb-server MariaDB-shared nginx docker-ce && systemctl enable redis mariadb nginx docker && systemctl start redis mariadb && yum -y install python36 python36-devel && python3.6 -m venv /opt/py3
(2)、替换github的地址,安装jumpserver、koko和guacamole组件,其中koko和guacamole采用docker安装
&& cd /opt && if [ ! -d "/opt/jumpserver" ]; then git clone --depth=1 https://gitee.com/yunwen_1_hlzhang/jumpserver.git; fi && if [ ! -f "/opt/luna.tar.gz" ]; then wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz; tar xf luna.tar.gz; chown -R root:root luna; fi && yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) && echo -e "[easy_install]\nindex_url = https://mirrors.aliyun.com/pypi/simple/" > ~/.pydistutils.cfg && source /opt/py3/bin/activate && pip install wheel -i https://mirrors.aliyun.com/pypi/simple/ && pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/ && pip install -r /opt/jumpserver/requirements/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ && mkdir /etc/docker && wget -O /etc/docker/daemon.json http://demo.jumpserver.org/download/docker/daemon.json && systemctl restart docker && docker pull wojiushixiaobai/jms_koko:1.5.6 && docker pull wojiushixiaobai/jms_guacamole:1.5.6 && rm -rf /etc/nginx/conf.d/default.conf && wget -O /etc/nginx/conf.d/jumpserver.conf https://demo.jumpserver.org/download/nginx/conf.d/jumpserver.conf
在pip安装MarkupSafe时会报如下错误:
由于python3中的setuptools已经升级到46以上,因此需要将官网中pip install --upgrade pip setuptools修改为pip install --upgrade pip setuptools==45.2.0即可,本文已经做了调整,这个也是官网安装过程中的bug
以上脚本也会存在相关插件版本的问题,如下图:
可以单独使用pip install pyasn1-modules==版本号
(3)、处理安装后的相关配置,以下采用jumpserver官方配置,但直接执行后对于其细节不是很清楚,因此本文对于配置采用手动方式,如下为jumpserver官网配置、手工配置参考参考文档:http://www.51niux.com/?id=234或者https://segmentfault.com/a/1190000015086911 ,这两篇博客是笔者参考的比较多的,经过多次实战挑出来的。
&& source ~/.bashrc && if [ "$DB_PASSWORD" = "" ]; then DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`; fi && if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; 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; fi && if [ "$Server_IP" = "" ]; then Server_IP=`ip addr | grep ‘state UP‘ -A2 | grep inet | egrep -v ‘(127.0.0.1|inet6|docker)‘ | awk ‘{print $2}‘ | tr -d "addr:" | head -n 1 | cut -d / -f1`; fi && if [ ! -d "/var/lib/mysql/jumpserver" ]; then 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;"; fi && if [ ! -f "/opt/jumpserver/config.yml" ]; then cp /opt/jumpserver/config_example.yml /opt/jumpserver/config.yml; sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml; sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml; sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml; sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml; sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml; sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml; fi
(4)、设置相关开机启动项
if [ ! -f "/usr/lib/systemd/system/jms.service" ]; then wget -O /usr/lib/systemd/system/jms.service https://demo.jumpserver.org/download/shell/centos/jms.service; chmod 755 /usr/lib/systemd/system/jms.service; systemctl enable jms; fi
(5)、启动相关服务
A.启动nginx:nginx
B.启动jumpserver:
# ./jms start all
# ./jms start all -d -d参数为后台运行jumpserver
3、登录jumpserver
经过以上步骤,输入IP地址,即可进入jumpserver的web登录页面,默认账号密码:admin/admin
登录之后可以看到如下后台
jumpserver的后台管理服务基本OK,但会遇到几个问题:
(1)、web终端进入为空,如下图,即使添加了主机以及相关配置OK了,在web终端中并不显示,注意:web终端的显示需要根据权限管理中的资产授权中进行配置。也就是及时资产配置等都没有问题,仍然在web终端中为空不显示的原因
(2)、文件管理502
koko服务可能没有起来,需要确保一下服务正常
docker启动:systemctl start docker
docker加入开机启动项里面:systemctl enable docker
koko启动且设置开机随docker启动,加入参数:--restart=always
-p参数:端口映射
CORE_HOST为jumpserver的启动ip和端口
BOOTSTRAP_TOKEN参考/op/jumpserver/config.yml
docker run --name jms_koko -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://172.16.29.80:8080 -e BOOTSTRAP_TOKEN=BLkJcpJooqdwXixq --restart=always wojiushixiaobai/jms_koko:1.5.6
(3)、支持Windows的插件:guacamole
启动guacamole容器服务并设置开机启动:
docker run --name jms_guacamole -d -p 127.0.0.1:8081:8080 -e JUMPSERVER_SERVER=http://172.16.29.80:8080 -e BOOTSTRAP_TOKEN=BLkJcpJooqdwXixq --restart=always wojiushixiaobai/jms_guacamole:1.5.6
通过docker ps -a可以查看两个服务均已启动
关于jumpserver的部署已讲述结束,关于jumpserver的使用配置,将在下节中进行实战描述
原文地址:https://blog.51cto.com/1864156/2478808