jumpserver

概览

开源跳板机,jumpserver受屈一指,如果你从来没用过跳板机,简单来说后面我们要实现的效果就是在WEB界面上统一管理Linux和Windows机器

准备

  • 一台2C4G的机器
  • 安装好docker、docker-compose

docker可采用阿里云安装,docker-compose是一个二进制文件可直接放到 /usr/bin 目录下,别忘记加上可执行权限

后面的安装步骤,我参考官方文档修改而来,比官方文档更适合新手阅读

提前下载镜像

cat /tmp/tmp.sh
Version=v2.3.0
docker pull jumpserver/jms_mysql:${Version}
docker pull jumpserver/jms_redis:${Version}
docker pull jumpserver/jms_core:${Version}
docker pull jumpserver/jms_koko:${Version}
docker pull jumpserver/jms_guacamole:${Version}
docker pull jumpserver/jms_nginx:${Version}

bash -x /tmp/tmp.sh

如果无法下载或者下载太慢,可以配置镜像加速测试了几个加速站点,发现只有阿里云加速,加速jumpservier下载比较好使

参考:https://blog.csdn.net/xys2015/article/details/109585777

Dockerfile

下面的Dokcerfile完全照搬官方,未做任何修改,相信大家有些基础都能看懂,里面有一些shell的变量,后面通过脚传进去

cat docker-compose.yml

version: '3'
services:
  mysql:
    image: jumpserver/jms_mysql:${Version}
    container_name: jms_mysql
    restart: always
    tty: true
    environment:
      DB_PORT: $DB_PORT
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - jumpserver

  redis:
    image: jumpserver/jms_redis:${Version}
    container_name: jms_redis
    restart: always
    tty: true
    environment:
      REDIS_PORT: $REDIS_PORT
      REDIS_PASSWORD: $REDIS_PASSWORD
    volumes:
      - redis-data:/var/lib/redis/
    networks:
      - jumpserver

  core:
    image: jumpserver/jms_core:${Version}
    container_name: jms_core
    restart: always
    tty: true
    environment:
      SECRET_KEY: $SECRET_KEY
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      LOG_LEVEL: $LOG_LEVEL
      DB_HOST: $DB_HOST
      DB_PORT: $DB_PORT
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      REDIS_HOST: $REDIS_HOST
      REDIS_PORT: $REDIS_PORT
      REDIS_PASSWORD: $REDIS_PASSWORD
    depends_on:
      - mysql
      - redis
    volumes:
      - core-data:/opt/jumpserver/data
    networks:
      - jumpserver

  koko:
    image: jumpserver/jms_koko:${Version}
    container_name: jms_koko
    restart: always
    privileged: true
    tty: true
    environment:
      CORE_HOST: http://core:8080
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      LOG_LEVEL: $LOG_LEVEL
    depends_on:
      - core
      - mysql
      - redis
    volumes:
      - koko-data:/opt/koko/data
    ports:
      - 2222:2222
    networks:
      - jumpserver

  guacamole:
    image: jumpserver/jms_guacamole:${Version}
    container_name: jms_guacamole
    restart: always
    tty: true
    environment:
      JUMPSERVER_SERVER: http://core:8080
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      GUACAMOLE_LOG_LEVEL: $LOG_LEVEL
    depends_on:
      - core
      - mysql
      - redis
    volumes:
      - guacamole-data:/config/guacamole/data
    networks:
      - jumpserver

  nginx:
    image: jumpserver/jms_nginx:${Version}
    container_name: jms_nginx
    restart: always
    tty: true
    depends_on:
      - core
      - koko
      - mysql
      - redis
    volumes:
      - core-data:/opt/jumpserver/data
    ports:
      - 80:80
    networks:
      - jumpserver

volumes:
  mysql-data:
  redis-data:
  core-data:
  koko-data:
  guacamole-data:

networks:
  jumpserver:

改造启动脚本

官方的启动步骤略复杂(当然更适合生产环境,精细化控制),我们直接从简,需要的变量都搁到一个shell脚本里

同样下面的环境变量里的值,从官方搬来未做任何修改,本文不考虑一些安全细节问题,快速看到效果

cat jumpserver-install.sh
# 版本号可以自己根据项目的版本修改
export Version=v2.3.0

# MySQL
export DB_HOST=mysql
export DB_PORT=3306
export DB_USER=jumpserver
export DB_PASSWORD=nu4x599Wq7u0Bn8EABh3J91G
export DB_NAME=jumpserver

# Redis
export REDIS_HOST=redis
export REDIS_PORT=6379
export REDIS_PASSWORD=8URXPL2x3HZMi7xoGTdk3Upj

# Core
export SECRET_KEY=B3f2w8P2PfxIAS7s4URrD9YmSbtqX4vXdPUL217kL9XPUOWrmy
export BOOTSTRAP_TOKEN=7Q11Vz6R2J6BLAdO

export LOG_LEVEL=ERROR

##
# SECRET_KEY 保护签名数据的密匙, 首次安装请一定要修改并牢记, 后续升级和迁移不可更改, 否则将导致加密的数据不可解密。
# BOOTSTRAP_TOKEN 为组件认证使用的密钥, 仅组件注册时使用。组件指 koko、guacamole
docker-compose up

启动

bash -x jumpserver-install.sh

访问

浏览器访问: http://<容器所在服务器IP>
SSH 访问: ssh -p 2222 <容器所在服务器IP>

默认管理员账户 admin 密码 admin
新版本首次登陆必须修改密码  admin123456  (根据自己情况,自行修改成其它)

下面两张图是本人已经配置好机器的效果图 截图里我自己做了内网穿透哈,大家用80端口访问即可

添加Linux机器

我们准备一台测试机器

192.168.31.100 
root / 123456

1 添加管理用户

管理用户是被控机器上的root用户

2 创建节点

官方文档里就说明要创建节点,我们就按照官方文档走,节点里面可以存放一组机器,这一组机器可以批量授权,这一组机器拥有同一个管理用户(比如都是 root / 123456 登录)

如下图,在Default上右键

3 创建资产

上图马赛克是我之前创建好的,为了不实现干扰,抹去

4 创建系统用户

系统用户是用来登录资产的用户,是linux上已经有的用户,有自动推送功能可以自动推送系统用户,因为前面创建了管理用户,不过我们最好自己登录到相关Linux机器上把系统用户创建出来,这里我们使用的系统用户和管理用户一样(也可以不一样),都是root

5 资产授权

完成授权,才能在web terminal里登录

5 登录机器

添加Windows机器

Windows资产是利用RDP协议(默认3389端口)远程连接的,操作步骤跟Linux类似,此处只简要概括关键步骤

开启远程桌面

右键我的电脑 >> 远程设置 >> 允许远程连接到此计算机

提前把windows防火墙,360啥到都关停,退出,排除干扰 ,我这里是用virtualbox启动一台win10虚拟机测试

创建一个管理员账号(可选)

已经有账号可以不用创建,这个账号最好有密码,密码为空可能会出现一些未知问题,另外windows桌面版(比如win10)不支持多人同时登录(不同账号也不行),在远程的时候最好提前把Windows上的账号注销,让Windows停留在登录账号的页面

右键我的电脑 >> 管理 >> 本地用户和组 >> 右键用户

我这里创建的用户是 kyle / kyle

接着右键组 >> 右键Administrator >> 属性 >> 把新创建的用户添加到管理员组里

其它步骤和Linux连接类似,管理账号和系统账号都用 kyle / kyle (也就是刚才创建的)

管理用户 和 系统用户

读者按照上面文档的步骤,或者说官方步骤,也许已经成功连上机器了,不过我相信读者十有八九会有困惑:jumpserver里各种用户到底什么关系 ?下面我尝试用文字解释下

管理用户是被控制机器上的root用户(对于windows来说就是需要授权到Administrator分组里)

系统用户是用来登录被控制机器的用户,可以不是root用户,也可以是root用户,只要这个用户能登录机器就行(建议提前把这个用户创建出来)

创建新资产,需要给这个资产选择管理用户

创建新授权,需要给这个授权选择一个系统用户

系统用户可以直接删掉,但是管理用户不能删掉,一个资产(一台机器),必须配置一个管理用户,在创建资产的时就需要选择

多个机器可以共用一个管理用户吗 ? 答:可以(只是恰巧账号密码相同)

多个机器可以公用一个系统用户吗 ? 答:可以(只是恰巧账号密码相同)

综上,如果我们现在拿到一台新的Linux机器,要给它配到jumpserver中管理,我们的流程是

创建这台机器的管理用户(要么是root,要么有sudo权限,登录方式可以是账号密码也可以是密钥) >> 创建资产(在页面里会提示你选择该资产的管理用户) >> 创建系统用户(可以是root可以不是root) >> 配置授权

遇到的问题

一直是激活中 ?

步骤都正确,但是jumpserver资产授权那块一直是 激活中 ,web终端里面没有显示 ?

检查每个服务器(包括jumpserver自身)之间的时间是否同步,如果不同步一定要配置同步,参考命令

yum install ntpdate -y
echo '*/10 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com' >> /var/spool/cron/root
chmod 0600 /var/spool/cron/root

连接很慢 老是timeout ?

vi /etc/ssh/sshd_config
UseDNS no


systemctl restart docker
docker restart jms_koko

资产授权里的用户无法删除 ?

先取消激活,然后再删除

参考资料

JUMPSERVER之问题总结 https://www.freesion.com/article/6309414395/
https://jumpserver.readthedocs.io/zh/master/install/step_by_step/