JumpServer簡介
Jumpserver是一款由python編寫, Django開發(fā)的開源跳板機/堡壘機系統(tǒng), 助力互聯網企業(yè)高效 用戶、資產、權限、審計 管理。jumpserver實現了跳板機應有的功能,基于ssh協(xié)議來管理,客戶端無需安裝agent。
Jumpserver是全球首款完全開源的堡壘機,使用 GNU GPL v2.0 開源協(xié)議,是符合 4A 的專業(yè)運維審計系統(tǒng)。
Jumpserver 使用 Python /Django 進行開發(fā),遵循 Web 2.0 規(guī)范,配備了業(yè)界領先的 Web Terminal 解決方案,交互界面美觀、用戶體驗好。
Jumpserver 采納分布式架構,支持多機房跨區(qū)域部署,中心節(jié)點提供 API,各機房部署登錄節(jié)點,可橫向擴展、無并發(fā)訪問限制。
JumpServer特點
(1)完全開源,GPL授權
(2)Python編寫,容易再次開發(fā)
(3)實現了跳板機基本功能,身份認證、訪問控制、授權、審計 、批量操作等。
(4)集成了Ansible,批量命令等
(5)支持WebTerminal
(6)Bootstrap編寫,界面美觀
(7)自動收集硬件信息
(8)錄像回放
(9)命令搜索
(10)實時監(jiān)控
(11)批量上傳下載
JumpServer環(huán)境說明
安裝環(huán)境
· 硬件配置: 2個CPU核心, 4G 內存, 50G 硬盤(最低)
· 操作系統(tǒng): Linux 發(fā)行版 x86_64
· Python環(huán)境:Python = 3.6.x
· 數據庫:Mysql Server ≥ 5.6 \ Mariadb Server ≥ 5.5.56
· 緩存數據庫:Redis
· 代理:Ningx
JumpServer 插件
Jumpserver 管理后臺,是核心組件(Core), 使用 Django Class Based View 風格開發(fā),支持 Restful API。
Koko
koko 為 SSH Server 和 Web Terminal Server 。用戶可以使用自己的賬戶通過 SSH 或者 Web Terminal 訪問 SSH 協(xié)議和 Telnet 協(xié)議資產。
Luna
luna 為 Web Terminal Server 前端頁面,用戶使用 Web Terminal 方式登錄時所需要的插件。
Guacamole
Guacamole是一個開源項目,為遠程桌面提供解決方案。,Jumpserver 使用其組件實現 RDP和VNC 功能,Jumpserver 并沒有修改其代碼而是添加了額外的插件,支持 Jumpserver 調用。JumpServer 組件及其監(jiān)聽端口
Jumpserver 8080/tcp
Redis 6379/tcp
MySQL/Mariadb 3306/tcp
Nginx 80/tcpKoko SSH 2222/tcp
Web Terminal 5000/tcp
Guacamole 8081/tcp
JumpServer部署安裝
系統(tǒng)配置
系統(tǒng)版本
[root@JumpServer ~]# cat /etc/redhat-release CentOS Linux release 8.2 (Core)
系統(tǒng)時間
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
# 設置防火墻規(guī)則,允許容器ip訪問宿主8080端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="8080" accept"
# 重新載入規(guī)則
firewall-cmd --reload
firewall-cmd --list-all
Python3和Python虛擬環(huán)境
安裝依賴軟件包
yum -y install wget gcc epel-release git
安裝Python3.6
dnf install python36 python36-devel
建立Python虛擬環(huán)境
#創(chuàng)建虛擬環(huán)境,環(huán)境命令自定義為py3
cd /opt
python3.6 -m venv py3
#運行虛擬化環(huán)境# 看到下面的提示符代表成功, 以后運行 Jumpserver 都要先運行以上 source 命令, 以下所有命?令均在該虛擬環(huán)境中運行
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
# 創(chuàng)建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
軟件環(huán)境依賴
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 依賴環(huán)境(py3模式下執(zhí)行)
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 虛擬環(huán)境? 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
檢查容器運行狀態(tài)
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/;? # 靜態(tài)資源, 如果修改安裝目錄, 此處需要修改
? ? }
? ? 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
# 顯示容器中正在運行的進程(相當于容器內執(zhí)行 ps -ef 命令)
docker top jms_koko
# 顯示 Docker 詳細的系統(tǒng)信息
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