JumpServer 堡垒机--CentOS 8 虚拟机安装部署

JumpServer简介

Jumpserver是一款由python编写, Django开发的开源跳板机/堡垒机系统, 助力互联网企业高效 用户、资产、权限、审计 管理。jumpserver实现了跳板机应有的功能,基于ssh协议来管理,客户端无需安装agent。

Jumpserver是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。

Jumpserver 使用 Python /Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。

Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发访问限制。

JumpServer特点

(1)完全开源,GPL授权

(2)Python编写,容易再次开发

(3)实现了跳板机基本功能,身份认证、访问控制、授权、审计 、批量操作等。

(4)集成了Ansible,批量命令等

(5)支持WebTerminal

(6)Bootstrap编写,界面美观

(7)自动收集硬件信息

(8)录像回放

(9)命令搜索

(10)实时监控

(11)批量上传下载

JumpServer环境说明

安装环境

· 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)

· 操作系统: Linux 发行版 x86_64

· Python环境:Python = 3.6.x

· 数据库:Mysql Server ≥ 5.6 \ Mariadb Server ≥ 5.5.56

· 缓存数据库:Redis

· 代理:Ningx

JumpServer 插件

Jumpserver 管理后台,是核心组件(Core), 使用 Django Class Based View 风格开发,支持 Restful API。

Koko

koko 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产。

Luna

luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录时所需要的插件。

Guacamole

Guacamole是一个开源项目,为远程桌面提供解决方案。,Jumpserver 使用其组件实现 RDP和VNC 功能,Jumpserver 并没有修改其代码而是添加了额外的插件,支持 Jumpserver 调用。

JumpServer 组件及其监听端口

Jumpserver 8080/tcp

Redis 6379/tcp

MySQL/Mariadb 3306/tcp

Nginx 80/tcpKoko SSH 2222/tcp

Web Terminal 5000/tcp

Guacamole 8081/tcp

JumpServer部署安装

系统配置

系统版本

[root@JumpServer ~]# cat /etc/redhat-release CentOS Linux release 8.2 (Core)

系统时间

date -s "2020-06-16 10:57:00"hwclock -wclock -w

selinux=

setenforce 0sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

firewall

# nginx端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

# 用户SSH登录端口koko

firewall-cmd --zone=public --add-port=2222/tcp --permanent

# 设置防火墙规则,允许容器ip访问宿主8080端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="8080" accept"

# 重新载入规则

firewall-cmd --reload

firewall-cmd --list-all

Python3和Python虚拟环境

安装依赖软件包

yum -y install wget gcc epel-release git

安装Python3.6

dnf install python36 python36-devel

建立Python虚拟环境

#创建虚拟环境,环境命令自定义为py3

cd /opt

python3.6 -m venv py3

#运行虚拟化环境# 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命 令均在该虚拟环境中运行

source /opt/py3/bin/activate

# 出现以上字符代表运行成功

(py3) [root@jumpserver py3]

Redis

Jumpserver使用Redis做cache和celery broke

dnf -y install redis

systemctl start redis && systemctl enable redis

systemctl status redis

Mariadb数据库

安装Mariadb数据库

dnf install mariadb-server mariadb -y

启动并开机启动

systemctl start mariadb && systemctl enable mariadb

初始化数据库

mysql_secure_installation

生成随机数据库密码

[root@JumpServer ~]# DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`

[root@JumpServer ~]# echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" 你的数据库密码是 dhfbGWxvTjZIPDzard39xy7L

数据库配置

mysql -uroot -p

# 创建jumpserver数据库

create database jumpserver default charset 'utf8';

# 授权jumpserver用户

grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'dhfbGWxvTjZIPDzard39xy7L';

grant all on jumpserver.* to 'jumpserver'@'localhost' identified by 'dhfbGWxvTjZIPDzard39xy7L';

# 刷新策略

flush privileges;

Jumpserver 安装

获取 jumpserver 代码

cd /opt && \

git clone --depth=1 https://github.com/jumpserver/jumpserver.git

网络有问题可以wget下载

wget http://demo.jumpserver.org/download/jumpserver/latest/jumpserver.tar.gztar xf jumpserver.tar.gz

软件环境依赖

dnf -y install gcc krb5-devel libtiff-devel libjpeg-devel libzip-devel freetype-devel libwebp-devel tcl-devel tk-devel sshpass openldap-devel mariadb-devel libffi-devel openssh-clients telnet openldap-clients

pip 依赖环境(py3模式下执行)

cd /opt/jumpserver/requirements/

pip install wheel && \

pip install --upgrade

pip setuptools && \

pip install -r requirements.txt

修改jumpserver配置文件

cd /opt/jumpserver

cp config_example.yml config.yml

SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`

# 生成随机SECRET_KEY

echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc

BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16` 

# 生成随机BOOTSTRAP_TOKEN

echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml

sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml

sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml

sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml

sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml

sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml

echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"

echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"

启动 jumpserver

确保已经载入 py3 虚拟环境  source /opt/py3/bin/activate

cd /opt/jumpserver

./jms start all -d

后台运行可以-d 参数

Docker安装

# 安装相关依赖

dnf install -y yum-utils device-mapper-persistent-data lvm2

# 配置Docker源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 重新生成缓存

dnf makecache

# 安装Docker-ce

rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

dnf -y install docker-ce

# 下载相关文件

mkdir -p /etc/docker

wget -O /etc/docker/daemon.json http://demo.jumpserver.org/download/docker/daemon.json

# 启动docker并设置开机自启

systemctl restart docker && systemctl enable docker

Docker 部署 koko 组件

docker run --name jms_koko -d \

  -p 2222:2222 \

  -p 127.0.0.1:5000:5000 \

  -e CORE_HOST=http://本机IP:8080 \

  -e BOOTSTRAP_TOKEN=你自己开始生成的TOKEN \

  -e LOG_LEVEL=ERROR \

  --restart=always \

  jumpserver/jms_koko:1.5.9

Docker 部署 guacamole 组件

docker run --name jms_guacamole -d \

  -p 127.0.0.1:8081:8080 \

  -e JUMPSERVER_SERVER=http://本机IP:8080 \

  -e BOOTSTRAP_TOKEN=你自己的token \

  -e GUACAMOLE_LOG_LEVEL=ERROR \

  jumpserver/jms_guacamole:1.5.9

检查容器运行状态

docker imagesdocker ps -a

查看docker IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称

安装Nginx

编辑 nginx repo文件

vi /etc/yum.repos.d/nginx.repo

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

安装Nginx

dnf -y install nginx

Nginx  jumpserver 配置文件

# 删除默认default.conf文件

rm -rf /etc/nginx/conf.d/default.conf

# 编辑 jumpserver 配置文件

vi /etc/nginx/conf.d/jumpserver.conf

[root@JumpServer conf.d]# cat jumpserver.conf

server {

    listen 80;

    client_max_body_size 100m;  # 录像及文件上传大小限制

    location /luna/ {

        try_files $uri / /index.html;

        alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改

    }

    location /media/ {

        add_header Content-Encoding gzip;

        root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改

    }

    location /static/ {

        root /opt/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改

    }

    location /koko/ {

        proxy_pass      http://localhost:5000;

        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 /guacamole/ {

        proxy_pass      http://localhost:8081/;

        proxy_buffering off;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection $http_connection;

        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 /ws/ {

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://localhost:8070;

        proxy_http_version 1.1;

        proxy_buffering off;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "upgrade";

    }

    location / {

        proxy_pass http://localhost:8080;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

Web Terminal(前端Luna)

下载安装包

cd /opt

wget https://github.com/jumpserver/luna/releases/download/1.5.9/luna.tar.gz

解压并授权

tar -xf luna.tar.gz

chown -R nginx:nginx luna

检查Nginx配置文件并启动

nginx -t

systemctl  start nginx && systemctl  enable nginx

systemctl  status nginx

访问 JumpServer Web

服务全部启动后, 访问 jumpserver 服务器 nginx 代理的 80 端口, 不要通过8080端口访问

默认账号: admin 密码: admin 如果页面出不来关闭nginx.conf中的80-server配置

ssh -p 2222 admin@192.168.180.222


CentOS 8.0 安装docker 报错:Problem: package docker-ce-3:19.03.4-3.el7.x86_64 requires containerd.io >= 1.2.2-3

package docker-ce-3:19.03.2-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed

- cannot install the best candidate for the job

- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded

- package containerd.io-1.2.2-3.el7.x86_64 is excluded

- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded

- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded

- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded

(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

更新 containerd.io 的版本,然后重新安装最新版本的docker 即可成功安装

wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

dnf install -y  containerd.io-1.2.6-3.3.el7.x86_64.rpm

检查是否安装成功

docker -v

docker 操作命令

# 搜索镜像

docker search *image_name*

# 下载镜像

docker pull *image_name*

# 查看镜像

docker images

# 删除镜像

docker rmi *image_name*

docker image rm *image_name*

# 导出docker镜像

docker save *image_name* > /save/image/path/name.tar.gz

# 导入docker镜像

docker load < /save/image/path/name.tar.gz

# 查看容器

docker ps

docker ps -a

docker ps -aq

# 容器端口映射列表

docker port jms_koko

# 运行|重启|停止容器

docker  start|restart|stop  <容器的 CONTAINER ID 或者 容器 NAMES >

# 查看容器 log

docker logs -f <容器的 CONTAINER ID 或者 容器 NAMES >

# 删除容器

docker rm *container_id*

# 显示容器对资源的使用情况(内存、CPU、磁盘等)

docker stats jms_koko

# 显示docker客户端和服务端版本信息

docker version

# 显示容器中正在运行的进程(相当于容器内执行 ps -ef 命令)

docker top jms_koko

# 显示 Docker 详细的系统信息

docker info

# 杀死所有正在运行的容器

docker kill $(docker ps -a -q)

# 删除所有已经停止的容器

docker rm $(docker ps -a -q)

# 删除所有未打 dangling 标签的镜像

docker rmi $(docker images -q -f dangling=true)

# 删除所有镜像

docker rmi $(docker images -q)

# 强制删除镜像名称中包含“doss-api”的镜像

docker rmi --force $(docker images | grep doss-api | awk '{print $3}')

# 删除所有未使用数据

docker system prune

# 只删除未使用的volumes

docker volume prune

> > > JumpServer官方文档:

https://docs.jumpserver.org/zh/master/install/step_by_step/

v2.0.0 新版本,使用 Vue + ElementUI 重构了前端页面

https://github.com/jumpserver/jumpserver/releases

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342