文章都可以转载、引用,标明转载出处即可。

jumpserver跳板机系统安装使用

Linux应用 Mr.c 828℃ 0评论

  跳板机估计大部分运维朋友都接触过,公司服务器多了,不可避免的需要用到跳板机,如果是自己运维人员用,没有太高需求使用跳板机系统,直接利用一台具有公网IP的服务器登录然后内网SSH到目标服务器即可。
但是有以下一些情况,让我们需要部署跳板机系统了:
  1. 网安等保评测(这点儿不用多说,做过等保的朋友应该都清楚);
  2. 部分开发人员因为需要登录线上服务器协助排查问题,这种情况一般是没有实时的日志收集分析系统,所以需要开发人员登录服务器跟踪分析日志;
  3. 运维团队内部需要做审计、记录服务器操作等;

  而个人对比使用了一些跳板机系统,个人认为jumpserver这款软件是当前最好用,最合适的开源跳板机系统,一些付费的功能比较强大,界面也美观,但是毕竟太贵了,小公司用不起,也没那个必要。
  Jumpserver 使用 Python / Django 进行开发,可以管理SSH、 Telnet、 RDP、 VNC 协议资产,对于Linux和Windows服务器来说都能控制,具有美观的web管理页面,登录资产都可以在web页面操作,这样也避免开发人员等少量使用服务器的人都安装SSH 客户端软件。
介绍下jumpserver都有哪些组件需要安装:
  1. Jumpserver 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作;
  2. Coco 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产;
  3. Luna 为 Web Terminal Server 前端页面, 用户使用 Web 方式登录受控服务器所需要的组件;
  4. Guacamole 为 RDP 协议和 VNC 协议资产组件, 用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产 (暂时只能通过 Web Terminal 来访问),简单说就是受控服务器为Windows时需要安装;
  由于我们没有Windows服务器,全部都是Linux服务器,所以只安装jumpserver、coco和luna 三个组件,具体安装过程不会详细说明,官方文档已经够详细,这里简单记录,主要加一些自己安装使用心得。
基本环境介绍:
  1. 系统版本:CentOS Linux release 7.6.1810 (Core)
  2. jumpserver版本 1.5
  3. 已安装NGINX,Redis,MySQL
  4. 软件安装目录定义到/data/jumpserver
第一次接触的朋友可以参考官方详细安装文档: http://docs.jumpserver.org/zh/master/setup_by_centos.html
如果只是想体验测试一下,可以安装官方提供的docker版,生产环境正式使用就不建议使用docker版了,请参考: http://docs.jumpserver.org/zh/master/dockerinstall.html
一:安装Python3环境
jumpserver是基于Python3开发,默认centos系统都是Python2环境,这里保留Python2环境,安装Python3 并使用Python3虚拟环境功能。
1. 安装基本工具软件

[root@cnyunwei ~]# yum -y install wget gcc git  #现在云服务厂商服务器基本都预装了epel源,如果没有epel源 就安装下 epel-release 

2. 安装Python3及工具

[root@cnyunwei ~]# yum -y install python36 python36-devel

3. 创建Python3虚拟环境

[root@cnyunwei ~]# cd /data
[root@cnyunwei ~]# python3.6 -m venv py3_venv
[root@cnyunwei ~]# source /data/py3_venv/bin/activate
执行source命令后当前终端会变成下面这样,就代表当前终端在Python3环境下
(py3_venv) [root@cnyunwei ~]# 

二:安装jumpserver组件
这里建议大家直接用Git方式拉取代码,方便后面进行软件升级,直接到GitHub上下载zip包方式不太便于软件版本升级
1.安装jumpserver管理系统

(py3_venv) [root@cnyunwei ~]# cd /data/jumpserver
(py3_venv) [root@cnyunwei jumpserver]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
(py3_venv) [root@cnyunwei jumpserver]# cd ./jumpserver/requirements
(py3_venv) [root@cnyunwei jumpserver]# yum -y install $(cat rpm_requirements.txt)  
(py3_venv) [root@cnyunwei jumpserver]# pip install --upgrade pip setuptools
(py3_venv) [root@cnyunwei jumpserver]# pip install -r requirements.txt
pip安装依赖组件一般容易报错,大家得根据自己服务器报错对应解决

创建MySQL数据库,并授权

mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'PASSWORD'; flush privileges;"  
#PASSWORD 替换为自己需要创建的密码

修改jumpserver配置文件

(py3_venv) [root@cnyunwei ~]# cd /data/jumpserver/jumpserver
(py3_venv) [root@cnyunwei ~]# cp config_example.yml config.yml
 [root@cnyunwei ~]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`  # 生成随机SECRET_KEY
 [root@cnyunwei ~]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
 [root@cnyunwei ~]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`  # 生成随机BOOTSTRAP_TOKEN
 [root@cnyunwei ~]# echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
 [root@cnyunwei ~]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /data/jumpserver/jumpserver/config.yml
 [root@cnyunwei ~]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /data/jumpserver/jumpserver/config.yml
 [root@cnyunwei ~]# sed -i "s/# DEBUG: true/DEBUG: false/g" /data/jumpserver/jumpserver/config.yml
 [root@cnyunwei ~]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /data/jumpserver/jumpserver/config.yml
 [root@cnyunwei ~]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /data/jumpserver/jumpserver/config.yml
 [root@cnyunwei ~]# sed -i "s/DB_PASSWORD: /DB_PASSWORD:数据库密码/g" /data/jumpserver/jumpserver/config.yml

配置文件替换了最好还是要vim打开看看里面配置,MySQL,Redis配置是否正确。

启动jumpserver服务,这里暂时不需要后台运行,所以不加-d参数,启动后打开新终端看下默认8080端口是否已经启动监听。

(py3_venv) [root@cnyunwei ~]# cd /data/jumpserver/jumpserver
(py3_venv) [root@cnyunwei ~]# ./jms start all

2. 安装coco组件

[root@cnyunwei ~]# cd /data/jumpserver
[root@cnyunwei jumpserver]# source /data/py3_venv/bin/activate
(py3_venv) [root@cnyunwei jumpserver]# git clone --depth=1 https://github.com/jumpserver/coco.git
(py3_venv) [root@cnyunwei jumpserver]# cd /data/jumpserver/coco/requirements
(py3_venv) [root@cnyunwei requirements]# yum -y install $(cat rpm_requirements.txt)
(py3_venv) [root@cnyunwei requirements]# pip install -r requirements.txt

修改配置文件

(py3_venv) [root@cnyunwei ~]# cd /data/jumpserver/coco
(py3_venv) [root@cnyunwei coco]# cp config_example.yml config.yml
(py3_venv) [root@cnyunwei coco]# sed -i "s/BOOTSTRAP_TOKEN: /BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /data/jumpserver/coco/config.yml
(py3_venv) [root@cnyunwei coco]# sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /data/jumpserver/coco/config.yml

启动coco服务,同样的,因为现在是调试阶段,为了方便看报错,不后台运行,后面要配置system启动脚本。

(py3_venv) [root@cnyunwei coco]# ./cocod start

  这个时候已经可以登录到jumpserver 测试系统是否正常使用了,访问http://your ipaddr:8080 ,默认账号: admin 密码: admin
3. jumpserver和coco添加system启动脚本
  前面两步都没问题,并且成功登录到jumpserver管理系统后就该配置启动脚本了,centos7我们采用system脚本方式。

[root@cnyunwei ~]# vim /usr/lib/systemd/system/jms.service        
[Unit]
Description=jms
After=network.target mysqld.service redis.service
Wants=mysqld.service redis.service

[Service]
Type=forking
Environment="PATH=/data/py3_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ExecStart=/data/jumpserver/jumpserver/jms start all -d
ExecReload=
ExecStop=/data/jumpserver/jumpserver/jms stop

[Install]
WantedBy=multi-user.target
[root@cnyunwei ~]# vim /usr/lib/systemd/system/coco.service 
[Unit]
Description=coco
After=network.target jms.service

[Service]
Type=forking
PIDFile=/data/jumpserver/coco/coco.pid
Environment="PATH=/data/py3_venv/bin"
ExecStart=/data/jumpserver/coco/cocod start -d
ExecReload=
ExecStop=/data/jumpserver/coco/cocod stop

[Install]
WantedBy=multi-user.target

4.安装luna前端
  luna是一个纯静态页面,所以下载zip包解压,配置上NGINX即可。

[root@cnyunwei ~]# cd /data/jumpserver/
[root@cnyunwei jumpserver]# wget https://github.com/jumpserver/luna/releases/download/1.5.0/luna.tar.gz 
[root@cnyunwei jumpserver]# tar xf luna.tar.gz
[root@cnyunwei jumpserver]# chown  root:root -R luna

5. 配置NGINX

[root@cnyunwei ~]# cat /usr/local/nginx/conf/vhost/jumpserver.conf
server {
    listen 443 ssl http2;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/ssl/cnyunwei.cc.cer;
    ssl_certificate_key /usr/local/nginx/conf/ssl/cnyunwei.cc.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4!DH:!DHE;
    ssl_prefer_server_ciphers on;
    server_name jmp.cnyunwei.cc;
    client_max_body_size 100m;  # 录像及文件上传大小限制
    location /luna/ {
        try_files $uri / /index.html;
        alias /data/jumpserver/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改
    }
    
    location /media/ {
        add_header Content-Encoding gzip;
        root /data/jumpserver/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改
    }
    
    location /static/ {
        root /data/jumpserver/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改
    }
    
    location /socket.io/ {
        proxy_pass       http://localhost: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://localhost: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 / {
        proxy_pass http://localhost: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;
    }
}

server {
   listen      80;
   server_name jmp.cnyunwei.cc;
   rewrite     ^   https://$server_name$request_uri? permanent;
}

三. 访问测试
  启动NGINX,通过配置的域名地址 https://jmp.cnyunwei.cc 登录,可以看到整个系统的界面确实还是非常美观的,功能上来说也都足够使用。

jumpserver跳板机系统主要需要设置两个账户:管理用户,系统用户 需要先创建好这两个类型的用户。
  管理用户是资产(被控服务器)上的root,或拥有 NOPASSWD: ALL sudo权限的用户, Jumpserver使用该用户来 `推送系统用户`、`获取资产硬件信息`等。
  系统用户是 Jumpserver跳转登录资产时使用的用户,可以理解为登录服务器的用户名,就像直接SSH登录服务器一样,可以使用root,也可以使用其他普通账户。

接下来就可以添加资产了,资产添加后检测成功在列表中还会显示资产基本配置情况:

四:登录受控服务器
登录方式一:通过web页面登录,admin账号下通过【会话管理】-【web终端】即可打开luna

在页面选择对应服务器即可登录

登录方式二:通过SSH 连接到jumpserver服务器
  这里要注意了,SSH 的端口不是Linux系统sshd服务的端口,是coco服务监听的端口,默认coco监听端口是2222

ssh -p 2222 admin@jump.cnyunwei.cc

  整体评测下来jumpserver完全满足我们对跳板机系统的需求,web方式登录更方便,不需要有SSH客户端,而SSH 的方式登录更方便配合rz、sz 等命令上传下载文件,虽然web版也可以进行文件上传下载,但是操作起来不是那么方便。
  以上就是对jumpserver跳板机系统的基本记录了,系统还可以分组设置资产权限,比如设置开发人员一个组,只允许使用普通系统用户登录受控服务器,同时有录像回放功能,可追溯操作过的命令,还可以设置命令过滤,限制使用某些执行命令(命令过滤有个严重bug,把命令写到脚本里面就无法过滤),功能是非常强大的。

转载请注明:菜鸟运维 » jumpserver跳板机系统安装使用

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址