开源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. 安装基本工具软件

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

2. 安装Python3及工具

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

3. 创建Python3虚拟环境

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

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

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

创建MySQL数据库,并授权

  1. 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;"
  2. #PASSWORD 替换为自己需要创建的密码

修改jumpserver配置文件

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

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

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

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

2. 安装coco组件

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

修改配置文件

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

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

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

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

  1. [root@cnyunwei ~]# vim /usr/lib/systemd/system/jms.service
  2. [Unit]
  3. Description=jms
  4. After=network.target mysqld.service redis.service
  5. Wants=mysqld.service redis.service
  6.  
  7. [Service]
  8. Type=forking
  9. Environment="PATH=/data/py3_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
  10. ExecStart=/data/jumpserver/jumpserver/jms start all -d
  11. ExecReload=
  12. ExecStop=/data/jumpserver/jumpserver/jms stop
  13.  
  14. [Install]
  15. WantedBy=multi-user.target
  1. [root@cnyunwei ~]# vim /usr/lib/systemd/system/coco.service
  2. [Unit]
  3. Description=coco
  4. After=network.target jms.service
  5.  
  6. [Service]
  7. Type=forking
  8. PIDFile=/data/jumpserver/coco/coco.pid
  9. Environment="PATH=/data/py3_venv/bin"
  10. ExecStart=/data/jumpserver/coco/cocod start -d
  11. ExecReload=
  12. ExecStop=/data/jumpserver/coco/cocod stop
  13.  
  14. [Install]
  15. WantedBy=multi-user.target

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

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

5. 配置NGINX

  1. [root@cnyunwei ~]# cat /usr/local/nginx/conf/vhost/jumpserver.conf
  2. server {
  3. listen 443 ssl http2;
  4. ssl on;
  5. ssl_certificate /usr/local/nginx/conf/ssl/cnyunwei.cc.cer;
  6. ssl_certificate_key /usr/local/nginx/conf/ssl/cnyunwei.cc.key;
  7. ssl_session_timeout 5m;
  8. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  9. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4!DH:!DHE;
  10. ssl_prefer_server_ciphers on;
  11. server_name jmp.cnyunwei.cc;
  12. client_max_body_size 100m; # 录像及文件上传大小限制
  13. location /luna/ {
  14. try_files $uri / /index.html;
  15. alias /data/jumpserver/luna/; # luna 路径, 如果修改安装目录, 此处需要修改
  16. }
  17. location /media/ {
  18. add_header Content-Encoding gzip;
  19. root /data/jumpserver/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改
  20. }
  21. location /static/ {
  22. root /data/jumpserver/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改
  23. }
  24. location /socket.io/ {
  25. proxy_pass http://localhost:5000/socket.io/; # 如果coco安装在别的服务器, 请填写它的ip
  26. proxy_buffering off;
  27. proxy_http_version 1.1;
  28. proxy_set_header Upgrade $http_upgrade;
  29. proxy_set_header Connection "upgrade";
  30. proxy_set_header X-Real-IP $remote_addr;
  31. proxy_set_header Host $host;
  32. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  33. access_log off;
  34. }
  35.  
  36. location /coco/ {
  37. proxy_pass http://localhost:5000/coco/; # 如果coco安装在别的服务器, 请填写它的ip
  38. proxy_set_header X-Real-IP $remote_addr;
  39. proxy_set_header Host $host;
  40. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  41. access_log off;
  42. }
  43.  
  44. location / {
  45. proxy_pass http://localhost:8080; # 如果jumpserver安装在别的服务器, 请填写它的ip
  46. proxy_set_header X-Real-IP $remote_addr;
  47. proxy_set_header Host $host;
  48. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  49. }
  50. }
  51.  
  52. server {
  53. listen 80;
  54. server_name jmp.cnyunwei.cc;
  55. rewrite ^ https://$server_name$request_uri? permanent;
  56. }

三. 访问测试
  启动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

  1. ssh -p 2222 admin@jump.cnyunwei.cc

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

posted @ 2020-03-09 10:38  vilenx  阅读(1319)  评论(0编辑  收藏  举报