前面咱們聊到了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上點擊對應的菜單查看,我這裏就不過多闡述了;