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