前面咱们聊到了open***的部署和使用,它可以实现从互联网经过open***链接到公司内网服务器,从而进行远程管理;但open***有一个缺点它不能记录哪些用户在内网服务器上操做了什么,拥有客户端的证书和私钥以及ca的证书和客户端配置,就能够直接链接到公司内网,这从某些角度讲不是一个安全的解决方案;html
今天咱们来聊一款和open***有相似功能的软件jumpserver;jumpserver和open***均可以让用户从互联网链接公司内网服务器;但一般jumpserver都不会放在互联网;它主要用做运维、开发、以及测试相关人员来利用它链接公司内网服务器,从而实现集中管理公司内网服务器;同时jumpserver还具备权限管理,用户管理,以及监控回放等等功能;node
环境说明mysql
<table style="height: 133px; width: 366px" border="0" align="left"><tbody><tr><td>主机名称</td><td>角色</td><td>ip地址</td></tr><tr><td>node01</td><td>jumpserver web</td><td>192.168.0.41</td></tr><tr><td>node02</td><td>mysql/redis</td><td>192.168.0.42</td></tr></tbody></table>linux
一、在node02上部署mariadb(版本最低5.5.6,若是是mysql版本最低5.6)web
配置mariadb yum仓库redis
[root@node02 ~]# cat /etc/yum.repos.d/mariadb.repo [mariadb] name=mariadb repo baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.1.46/yum/centos/7/x86_64/ gpgcheck=0 [root@node02 ~]#
安装MariaDB-serversql
[root@node02 ~]# yum install -y MariaDB-server
配置mariadb 忽略名称解析docker
启动mariadb数据库
链接mariadb 建立数据库和用户json
[root@node02 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.46-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database jumpserver default charset 'utf8' collate 'utf8_bin'; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'%' identified by 'admin123.com'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]>
验证:使用jumpserver登陆数据库
[root@node02 ~]# mysql -ujumpserver -padmin123.com -h192.168.0.42 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 10.1.46-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | jumpserver | | test | +--------------------+ 3 rows in set (0.01 sec) MariaDB [(none)]> exit Bye [root@node02 ~]#
ok,到此数据服务就准备好了;
二、在node02上部署redis
安装redis
[root@node02 ~]# yum -y install redis
配置redis监听本机全部地址,并设置密码
[root@node02 ~]# grep -Ei "^(bind|requirepass)" /etc/redis.conf bind 0.0.0.0 requirepass admin123.com [root@node02 ~]#
启动redis
验证:登陆redis
[root@node02 ~]# redis-cli -h 192.168.0.42 192.168.0.42:6379> KEYS * (error) NOAUTH Authentication required. 192.168.0.42:6379> AUTH admin123.com OK 192.168.0.42:6379> KEYS * (empty list or set) 192.168.0.42:6379> exit [root@node02 ~]#
到此redis就准备好了
三、在node01上部署jumpserver web 容器
配置docker-ce的yum源
[root@node01 ~]# cat /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-source] name=Docker CE Stable - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge] name=Docker CE Edge - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-debuginfo] name=Docker CE Edge - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-source] name=Docker CE Edge - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test] name=Docker CE Test - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-debuginfo] name=Docker CE Test - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-source] name=Docker CE Test - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly] name=Docker CE Nightly - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-debuginfo] name=Docker CE Nightly - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-source] name=Docker CE Nightly - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [root@node01 ~]#
安装docker-ce
[root@node01 ~]# yum install -y docker-ce
启动docker
[root@node01 ~]# systemctl start docker [root@node01 ~]# docker info Client: Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 19.03.13 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-693.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 1.781GiB Name: node01.test.org ID: JQY2:LCCM:EU6J:ARI7:UCEL:5HUV:FGE4:6RTY:PWR3:NKJI:EA3K:BKSA Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false [root@node01 ~]#
配置docker加速器
[root@node01 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com","https://cyr1uljt.mirror.aliyuncs.com"] } [root@node01 ~]#
重启docker
[root@node01 ~]# systemctl restart docker
使用doker info 命令验证加速器地址是否应用
下载jumpserver web镜像
[root@node01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@node01 ~]# docker pull jumpserver/jms_all:v2.4.0 v2.4.0: Pulling from jumpserver/jms_all 75f829a71a1c: Pull complete f9c494d6df5d: Pull complete 5135b4193f02: Pull complete 918e815b1dc8: Pull complete 0334369c4479: Pull complete 64a0f2a7663a: Pull complete Digest: sha256:2081c88eca6dffb41bc42d8fe06d18c4379eacdbb354fa56dffd2a918738274d Status: Downloaded newer image for jumpserver/jms_all:v2.4.0 docker.io/jumpserver/jms_all:v2.4.0 [root@node01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jumpserver/jms_all v2.4.0 3418bbaaded1 9 days ago 1.54GB [root@node01 ~]#
编写生成SECRET_KEY和``BOOTSTRAP_TOKEN的脚本
[root@node01 ~]# cat key_gen.sh #!/bin/bash if [ ! "$SECRET_KEY" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; 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; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi [root@node01 ~]#
提示:上面脚本主要是判断是否有SECRET_KEY和BOOTSTRAP这两个key,若是没有就生成,并把SECRET_KEY保存到SECRET_KEY并放到当前家目录的.bashrc中,并打印出来,若是有就直接打印出来;
运行脚本生成SECRET_KEY和``BOOTSTRAP_TOKEN
[root@node01 ~]# bash key_gen.sh wIUaeZtCbtTNUDL9igEIImALjjaMo9ygPwfMWmPZcyWD0c3K9Q Lx15DW9xDxqOkiCq [root@node01 ~]#
提示:这两个随机密钥很重要,它用来加密数据库字段用的,因此在环境迁移和升级都会用到这两个key;
建立用户保存jumpserver容器中的数据目录
[root@node01 ~]# mkdir /data/jumpserver/ -pv mkdir: created directory ‘/data’ mkdir: created directory ‘/data/jumpserver/’ [root@node01 ~]#
启动jumpserver/jms_all:v2.4.0镜像为容器
[root@node01 ~]# docker run --name jms_all -d \ > -v /data/jumpserver/:/opt/jumpserver/data \ > -p 80:80 \ > -p 2222:2222 \ > -e SECRET_KEY=wIUaeZtCbtTNUDL9igEIImALjjaMo9ygPwfMWmPZcyWD0c3K9Q \ > -e BOOTSTRAP_TOKEN=Lx15DW9xDxqOkiCq \ > -e DB_HOST=192.168.0.42 \ > -e DB_PORT=3306 \ > -e DB_USER=jumpserver \ > -e DB_PASSWORD=admin123.com \ > -e DB_NAME=jumpserver \ > -e REDIS_HOST=192.168.0.42 \ > -e REDIS_PORT=6379 \ > -e REDIS_PASSWORD=admin123.com \ > --privileged=true \ > jumpserver/jms_all:v2.4.0 8974115a714c5000bac47a8a457190408861ad1967429435ad4f6a0b838c2fe3 [root@node01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8974115a714c jumpserver/jms_all:v2.4.0 "./entrypoint.sh" 14 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:2222->2222/tcp jms_all [root@node01 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::2222 :::* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node01 ~]#
提示:以上启动容器主要指定了mariadb和redis服务器的相关地址和密码端口信息;其中在宿主机上暴露了80和2222端口;
查看日志
提示:使用docker logs -f 容器id 可以看到上图中的信息,说明jumpserver容器就跑起来了;
访问jumpserver
提示:访问jumpserver容器所在主机的ip地址便可访问到jumpserver,默认用户名和密码都是admin;
提示:第一次登录时,它会让咱们重设密码;
提示:重设密码后,从新登陆,jumpserver的首页就是上图这样;后续咱们就能够在这个界面来管理内网服务器了;到此jumpserver服务器就搭建好了;
一、jumpserver基本设置
提示:基本设置是必须设置当前jumpserver的url和邮件主题前缀;这样在用户收到邮件中的连接都会指向这个jumpserver的url;
二、配置jumpserver发邮件的邮件服务器和用户名密码
提示:在系统设置--->邮件设置,把对应的帐号信息,邮件服务器信息都填写好,而后测试链接,若是能够正常收到邮件,说明邮件服务器信息和邮件用户名密码没有问题;最后点提交;
三、建立用户
提示:在用户管理--->用户列表--->建立;填写好用户相关信息后,点击最下面的提交;
提示:新建用户成功之后,对应的用户邮箱就会收到一份有jumpserver发送到用户建立成功的邮件,用户能够点击此邮件中的连接进行密码设定;
提示:密码设定好了,点击设置;用户会收到一份密码更新成功的邮件;
四、建立用户组,并把test用户添加到对应的组中;
提示:用户管理--->用户组---->建立,填写好组信息和选择好用户后,点击提交便可;
五、jumpserver 资产管理--->管理用户建立
提示:资产管理---->管理用户---->建立,填写好对应被管控端的管理员和密码点击提交;管理用户是资产(被控服务器)上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户, JumpServer 使用该用户来 `推送系统用户`、`获取资产硬件信息` 等。
六、建立系统用户,这里的系统用户是指咱们使用jumpserver登陆到对应的被管控主机时用的用户
提示:资产管理--->系统用户--->新建,填写好用户名,勾选自动推送和自动生成密钥,点击最下方的提交便可;这里填写的用户会用做jumpserver上登陆对应的主机用到用户,若是被管控端没有这个用户,jumpserver就会利用咱们刚才添加的管理用户去建立一个这里的系统用户;
七、建立资产
提示:资产管理--->资产列表--->新建,填写对应被管控的的主机信息和ip地址信息,以及管理用户,点击最下方的提交;
提示:提交完成后,咱们就能够在资产列表中看到咱们刚才添加到主机;
八、资产受权
提示:权限管理--->资产受权--->建立,填写好名称后,要选择用户和组以及资产和系统用户,而后点击最下方的提交;到此一个资源就受权给test用户和test组中的成员了;这里须要注意一点,一个节点中有不少server,若是你只想受权单台server给某个用户,下面的节点就留空,若是你想受权一个节点给用户你能够选择节点,上面的资产就能够留空,若是你又想受权单个资产和某个节点给用户,就选择对应的资产和节点便可;若是这里选择default节点,表示把default节点下的全部主机都受权给用户;默认default节点包含全部主机;
验证:使用test用户登陆jumpserver,看看test用户是否可以看到咱们建立的资源?
提示:首次登录,它会让咱们更新用户的信息,而后同一些条款,这个咱们按照实际信息来修改便可;在个人资产中能够看到当前用户有点资产;
验证:使用test用户链接node01看看是否能够链接到node01?
提示:能够看到test用户是能够正常使用咱们配置的jumpserver用户正常正常的链接到node01;
九、查看用户操做回放
提示:点击会话管理---->会话管理---->历史会话----> 找到对应会话后面的回放便可查看对应用户在过去会话中执行的操做;
好了,jumpserver的基本操做就到此为止了,后续其余日志啊,均可以在web上点击对应的菜单查看,我这里就不过多阐述了;