JumpServer 是全球首款开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 规范的运维安全审计系统。JumpServer 使用 Python 开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。
特色优势:
本次为简单的安装部署,为了快速部署,就用一台服务器进行演示即可。
OS | kernel | 备注 |
---|---|---|
CentOS 7.6(106.52.187.250/172.16.0.16) | 3.10 | 堡垒机(统一资源管理平台) |
本次安装版本,参照:https://docs.jumpserver.org/zh/master/dev/build/ 进行安装
组件 | 版本 | 备注 |
---|---|---|
MySQL | 5.7 | 数据存储 >=5.7 |
Redis | 6.0 | 数据缓存 >=5.0 |
Core | 2.14.2 | JumpServer 的核心组件,由 Django 二次开发而来,内置了 Lion Celery Beat Flower Daphne 服务 |
Lina | 2.14.2 | JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成 |
Luna | 2.14.2 | JumpServer 的前端 UI 项目,主要使用 Angular CLI 完成 |
KoKo | 2.14.2 | Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务 |
Lion | 2.14.2 | 实现 RDP/VNC 协议跳板机功能 |
Nginx | 1.18 | 代理(转发) |
Nodejs | 12.14.0 | 对于 Luna,其他版本可能会存在问题(在 install 时)。或者使用14.15.0版本 |
Go | 1.15 | KoKo 编译 |
统一使用以下 Key、Token
- | 随机生成 | 备注 |
---|---|---|
Key | c7Z4OrTAEtj1AEGrHSIYfoTSgP5OAKTmPa2DjOOUHEtsB6un | 加密秘钥,生产环境中请修改为随机字符串 |
Token | GkzXTzSCTTDYikXHgT6l1PeC | 预共享Token,koko 和 lion 用来注册服务账号 |
可使用命令来随机生成:
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 48 # 变更长度修改 -c 参数后的数值即可
- 大家可以采用源码部署方式进行部署,增加一下对 Linux 操作系统的熟练度。
- 当然也可以通过容器部署。
1、执行安装脚本
bash ./mysql_5.7_install.sh
# 使用默认端口:3306
# 需要安装脚本的可私我
如何修改 mysql root 用户的初始密码?
方法1: mysql> use mysql; mysql> update user set password=password('新密码') where user='root' and host='localhost'; mysql> flush privileges; 方法2: mysql> set password for 用户名@localhost = password('新密码'); 方法3: mysqladmin -u用户名 -p旧密码 password 新密码
2、创建数据库
create database jumpserver default charset utf8 collate utf8_general_ci;
3、授权数据库用户权限
grant select,insert,update,delete on jumpserver.* to 'jumpserver'@'172.16.%' identified by "ZhuRS@123!";
flush privileges;
权限问题请看 FAQ 说明
执行安装脚本
bash ./redis_6.0_install.sh
# 使用默认端口:6379
# 需要安装脚本的可私我
1、资源下载
mkdir /opt/jumpserver-v2.14.2
wget -O /opt/jumpserver-v2.14.2.tar.gz https://github.com/jumpserver/jumpserver/releases/download/v2.14.2/jumpserver-v2.14.2.tar.gz
2、解压
cd /opt
tar -xf jumpserver-v2.14.2.tar.gz -C /opt/jumpserver-v2.14.2 --strip-components 1
3、安装 Python36
yum install -y epel* openldap-devel gcc-c++ mysql-devel make sshpass
yum install -y python36 python36-devel
4、安装 Python 依赖
python3 -m venv /opt/py3
source /opt/py3/bin/activate # 每次运行项目都需要先执行 source /opt/py3/bin/activate 载入此环境
cd /opt/jumpserver-v2.14.2
pip install --upgrade pip # 升级一下pip版本,否则可能会报错
pip install -r requirements/requirements.txt # 开始安装依赖
5、修改 jumpserver 配置文件
cd /opt/jumpserver-v2.14.2
cp config_example.yml config.yml
vim config.yml
grep -Ev "^$|^[#;]" config.yml
SECRET_KEY: c7Z4OrTAEtj1AEGrHSIYfoTSgP5OAKTmPa2DjOOUHEtsB6un
BOOTSTRAP_TOKEN: GkzXTzSCTTDYikXHgT6l1PeC
DEBUG: true
LOG_LEVEL: DEBUG
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 172.16.0.16
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: ZhuRS@123!
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 172.16.0.16
REDIS_PORT: 6379
REDIS_PASSWORD: kbZnQByQ8tyT9l1K9R3x
其实到这里已经可以看到 jumpserver 登录界面了
尝试访问:http://106.52.187.250:8080/
默认账户:admin
默认密码:admin
新密码:Scedu@123
只不过是进不去 Web UI 界面的,因为我们还没配置 nginx
1、下载资源
mkdir /opt/lina-v2.14.2
wget -O /opt/lina-v2.14.2.tar.gz https://github.com/jumpserver/lina/releases/download/v2.14.2/lina-v2.14.2.tar.gz
2、解压
cd /opt
tar -xf lina-v2.14.2.tar.gz -C /opt/lina-v2.14.2 --strip-components 1
3、安装 nodejs
cd /opt
wget https://nodejs.org/dist/v14.18.0/node-v14.18.0-linux-x64.tar.xz
tar xf node-v14.18.0-linux-x64.tar.xz -C /usr/local/
cd /usr/local/ && mv node-v14.18.0-linux-x64/ nodejs
vim /etc/profile.d/node.sh
export NODE_HOME=/usr/local/nodejs
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile.d/node.sh
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
4、安装依赖
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass
npm config set registry https://registry.npm.taobao.org
npm install -g yarn
yarn config set registry https://registry.npm.taobao.org
npm install -g yarn
yarn install
5、修改配置文件
vim .env.development
ENV = 'development'
# base api
VUE_APP_BASE_API = ''
VUE_APP_PUBLIC_PATH = '/ui/'
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# External auth
VUE_APP_LOGIN_PATH = '/core/auth/login/'
VUE_APP_LOGOUT_PATH = '/core/auth/logout/'
# Dev server for core proxy
VUE_APP_CORE_HOST = 'http://172.16.0.16:8080' # 修改成 Core 的 url 地址
VUE_APP_CORE_WS = 'ws://172.16.0.16:8070'
VUE_APP_ENV = 'development'
6、运行 Lina
cd /opt/lina-v2.14.2
yarn serve
7、构建 Lina
cd /opt/lina-v2.14.2
yarn build:prod
# 构建完成后在当前目录生成 lina 构建包,可移植至 nginx
1、下载资源
mkdir /opt/luna-v2.14.2
wget -O /opt/luna-v2.14.2.tar.gz https://github.com/jumpserver/luna/releases/download/v2.14.2/luna-v2.14.2.tar.gz
2、解压
cd /opt
tar -xf luna-v2.14.2.tar.gz -C /opt/luna-v2.14.2 --strip-components 1
3、安装 nodejs
- 上面已经安装
- 不过对于 Luna 来说 nodejs 10.24.1 版本较低,其他高版本在
npm install
时又会卡住不动,尝试了几个版本,最终 12.14.0、14.15.0 可用,其他版本大家也可以尝试一下。- FAQ 有说明
4、安装依赖
npm install
npm install --dev
npm rebuild node-sass
5、修改配置文件
vim proxy.conf.json
{
"/koko": {
"target": "http://172.16.0.16:5000", # KoKo 地址
"secure": false,
"ws": true
},
"/media/": {
"target": "http://172.16.0.16:8080", # Core 地址
"secure": false,
"changeOrigin": true
},
"/api/": {
"target": "http://172.16.0.16:8080", # Core 地址
"secure": false, # https ssl 需要开启
"changeOrigin": true
},
"/core": {
"target": "http://172.16.0.16:8080", # Core 地址
"secure": false,
"changeOrigin": true
},
"/static": {
"target": "http://172.16.0.16:8080", # Core 地址
"secure": false,
"changeOrigin": true
},
"/lion": {
"target": "http://172.16.0.16:9529", # Lion 地址
"secure": false,
"pathRewrite": {
"^/lion/monitor": "/monitor"
},
"ws": true,
"changeOrigin": true
},
"/omnidb": {
"target": "http://172.16.0.16:8082",
"secure": false,
"ws": true,
"changeOrigin": true
}
}
6、安装 ng
npm install -g @angular/cli
7、运行 Luna
ng serve
- 这里可能会提示你的 nodejs 版本过低,会给出对应的 node 版本,根据对应的版本再次安装 node,最后再重新启动即可。
- 或者可能报 Error from chokidar… 错误
- FAQ 有说明
8、构建 Luna
ng build
# 构建完成后在当前目录生成 dist 构建包,可移植至 nginx
1、下载资源
mkdir /opt/koko-v2.14.2
wget -O /opt/koko-v2.14.2.tar.gz https://github.com/jumpserver/koko/archive/refs/tags/v2.14.2.tar.gz
2、解压
cd /opt
tar -xf koko-v2.14.2.tar.gz -C /opt/koko-v2.14.2 --strip-components 1
3、安装 go
wget https://golang.google.cn/dl/go1.15.linux-amd64.tar.gz
tar -xf go1.15.linux-amd64.tar.gz -C /usr/local/
chown -R root:root /usr/local/go
export PATH=/usr/local/go/bin:$PATH
echo 'export PATH=/usr/local/go/bin:$PATH' >> ~/.bashrc
4、编译
cd /opt/koko-v2.14.2
make
# 会在当前目录生成 build 目录
5、修改配置文件
cd /opt/koko-2.14.2/build/ # 进入编译后的文件夹
tar xzf koko---linux-amd64.tar.gz # 解压编译后的文件
cd /opt/koko-2.14.2/build/koko---linux-amd64
mv config_example.yml config.yml
vim config.yml
grep -Ev "^$|^[#;]" config.yml
CORE_HOST: http://172.16.0.16:8080 # Core的URL
BOOTSTRAP_TOKEN: GkzXTzSCTTDYikXHgT6l1PeC # Core的token
BIND_HOST: 0.0.0.0
SSHD_PORT: 2222
HTTPD_PORT: 5000
LOG_LEVEL: DEBUG
6、启动 KoKo
cd /opt/koko-2.14.2/build/koko---linux-amd64
./koko
1、部署 Guacd
下载资源
mkdir /opt/guacamole-v2.14.2 && cd /opt/guacamole-v2.14.2
wget http://download.jumpserver.org/public/guacamole-server-1.3.0.tar.gz
tar -xzf guacamole-server-1.3.0.tar.gz
安装 Guacd 依赖
yum -y localinstall --nogpgcheck https://mirrors.aliyun.com/rpmfusion/free/el/rpmfusion-free-release-7.noarch.rpm
yum install -y cairo-devel libjpeg-turbo-devel libpng-devel libtool uuid-devel
yum install -y ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel
构建 Guacd
cd guacamole-server-1.3.0/
./configure --with-init-dir=/etc/init.d
make
make install
ldconfig
如果希望使用 systemd 管理, 可以使用
./configure --with-systemd-dir=/etc/systemd/system/
2、部署 Lion
下载资源
cd /opt && wget https://github.com/jumpserver/lion-release/releases/download/v2.14.2/lion-v2.14.2-linux-amd64.tar.gz
tar -xf lion-v2.14.2-linux-amd64.tar.gz
修改配置文件
cd lion-v2.14.2-linux-amd64 && cp config_example.yml config.yml
vim config.yml
grep -Ev "^$|^[#;]" config.yml
CORE_HOST: http://172.16.0.16:8080
BOOTSTRAP_TOKEN: GkzXTzSCTTDYikXHgT6l1PeC
BIND_HOST: 0.0.0.0
HTTPD_PORT: 8081
LOG_LEVEL: DEBUG
3、启动 Guacd
/etc/init.d/guacd start
4、启动 Lion
cd /opt/lion-v2.14.2-linux-amd64
./lion
vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
# server_name _;
client_max_body_size 5000m;
# Luna 配置
location /luna/ {
proxy_pass http://172.16.0.16:4200;
}
# Core data 静态资源
location /media/replay/ {
add_header Content-Encoding gzip;
root /opt/jumpserver-v2.14.2/data/;
}
location /media/ {
root /opt/jumpserver-v2.14.2/data/;
}
location /static/ {
root /opt/jumpserver-v2.14.2/data/;
}
# KoKo Lion 配置
location /koko/ {
proxy_pass http://172.16.0.16:5000;
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_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# lion 配置
location /lion/ {
proxy_pass http://172.16.0.16:8081;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 6000;
}
# Core 配置
location /ws/ {
proxy_pass http://172.16.0.16:8070;
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_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/ {
proxy_pass http://172.16.0.16: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;
}
location /core/ {
proxy_pass http://172.16.0.16: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;
}
# 前端 Lina
location /ui/ {
proxy_pass http://172.16.0.16:9528;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
rewrite ^/(.*)$ /ui/$1 last;
}
}
访问:http://106.52.187.250/
当然你也可以把构建后的 Lina、Luna 移至 nginx,效果一样。
Linux 服务器上访问:
ssh [email protected] -p2222
[email protected]'s password:
# admin:jumpserver登录用户(其实就是登录查看该用户的资源)
# 172.16.0.16:jumpserver的IP地址
#.....password:jumpserver的admin登录用户的登录密码
1、报错类型
2、报错原因
缺少相关的依赖
3、解决方案
# 图一:
yum install mysql-devel
# 图二:
yum install -y epel* openldap-devel gcc-c++ make sshpass
1、报错类型
启动 Core 时报错
./jms start
2、报错原因
jumpserver 数据库缺少 REFERENCES 权限问题
3、解决方案
mysql> grant REFERENCES on jumpserver.* to 'jumpserver'@'172.16.%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
添加权限后仍然报同样错误,肯定是数据库权限的问题,还没找出对于 jumpserver 需要什么权限,有知道的朋友可评论区留言。因此这里我果断给 jumpserver 数据库全权限。
mysql> grant all on jumpserver.* to 'jumpserver'@'172.16.%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
再次执行
./jms start
这次就可以了,果然绿色是最好的颜色。
1、启动 Luna 报错
运行 ng serve 时报 Error from chokidar…
解决:调大 fs.inotify.max_user_watches
其他参数说明:
fs.inotify.max_queued_events:表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
fs.inotify.max_user_instances:表示每一个real user ID可创建的inotify instatnces的数量上限,默认128.
fs.inotify.max_user_watches:表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)
注:
max_queued_events 是 inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。如果你在日志中看到 Event Queue Overflow,说明 max_queued_events 太小需要调整参数后再次使用。
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
再次启动 Luna
这次就不会报错了,之前是因为
fs.inotify.max_user_watches
默认128,启动时超过了该数值,导致报错。
2、Luna 构建报错
很明显是缺少模块,安装模块即可
npm install crypto-js
# 再次构建即可
1、make 编译时报错
2、解决方案
timeout 超时,说明又被 qiang 了,配置一下代理,再次 make 即可。
go env -w GOPROXY=https://goproxy.cn
make
在每个组件下载过程中,要保证下载后文件的一致性,如下载文件的大小,否则解压就会有问题,因为下载过程中 Resolve 的是国外网站。
tar -xf koko-v2.14.2.tar.gz -C /opt/koko-v2.14.2 --strip-components 1
tar: This does not look like a tar archive
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
# 上面的错误就是典型的文件下载不完整
# 可使用一些国内镜像进行下载
来梳理一下 JumpServer 的组件关系:
JumpServer 项目源码:https://github.com/jumpserver/
<点击跳转至开头>