开源jumpserver跳板机系统安装使用
开源jumpserver跳板机系统安装使用
跳板机估计大部分运维朋友都接触过,公司服务器多了,不可避免的需要用到跳板机,如果是自己运维人员用,没有太高需求使用跳板机系统,直接利用一台具有公网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 -p -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,把命令写到脚本里面就无法过滤),功能是非常强大的。