备注:该源码是基于jumpserver V2.15.3版本而来,后续开发都在此版本进行迭代开发。其中core、koko、lion最后是以服务的形式进行部署,有对应的端口号;guacamole-server是个工具包,只需要安装启动就好;lina、luna是前端界面,部署时只需要在nginx配置好即可,没有端口号服务。

Core编译配置

Core 是 JumpServer 的核心组件,由 Django 二次开发而来,内置了 Gunicorn Celery Beat Flower Daphne 服务

环境要求 :python>= 3.6,MariaDB>= 10.2,Redis>= 5

core源码编译安装:

cd jumpserver-v2.15.3
wget https://download.jumpserver.org/files/GeoLite2-City.mmdb -O apps/common/utils/geoip/GeoLite2-City.mmdb

centos7环境:

yum install -y epel-release postgresql-devel mariadb-devel openldap-devel gcc-c++ make sshpass
yum install -y python36 python36-devel

Ubuntu20.04环境:

apt-get install -y libpq-dev libffi-dev libxml2 libxslt-dev libmariadb-dev libldap2-dev libsasl2-dev sshpass mariadb-client bash-completion g++ make sshpass
apt-get install -y python3.8 python3.8-dev python3-venv

安装python依赖:为 JumpServer 项目单独创建 python3 虚拟环境并进入环境

python3 -m venv ../py3
source ../py3/bin/activate

每次运行项目都需要先执行 source …/py3/bin/activate 载入此环境。

pip install -U pip
pip install -r requirements/requirements.txt

修改配置文件:

cp config_example.yml config.yml
vi config.yml
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 48;echo
SECRET_KEY: ****************  # 必填项, 长度推荐 50 位以上# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token koko 和 lion 用来注册服务账号,不在使用原来的注册接受机制
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24;echo
BOOTSTRAP_TOKEN: ***********  # 必填项, 长度推荐 20 位以上# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: true                   # 开发建议打开 DEBUG, 生产环境应该关闭# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日志级别
LOG_LEVEL: DEBUG              # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
# LOG_DIR:# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true  # 浏览器关闭 session 过期# Database setting, Support sqlite3, mysql, postgres ....
# 数据库设置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases# SQLite setting:
# 使用单文件sqlite数据库
# DB_ENGINE: sqlite3
# DB_NAME:
# MySQL or postgres setting like:
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1       # 自行配置 数据库相关
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: ********
DB_NAME: jumpserver# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 运行时绑定端口, 将会使用 0.0.0.0:8080 0.0.0.0:8070 端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1    # 自行配置 Redis 相关
REDIS_PORT: 6379
REDIS_PASSWORD: ********
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4# Use OpenID Authorization
# 使用 OpenID 进行认证设置
# AUTH_OPENID: False # True or False
# BASE_SITE_URL: None
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_PROVIDER_ENDPOINT: https://op-example.com/
# AUTH_OPENID_PROVIDER_AUTHORIZATION_ENDPOINT: https://op-example.com/authorize
# AUTH_OPENID_PROVIDER_TOKEN_ENDPOINT: https://op-example.com/token
# AUTH_OPENID_PROVIDER_JWKS_ENDPOINT: https://op-example.com/jwks
# AUTH_OPENID_PROVIDER_USERINFO_ENDPOINT: https://op-example.com/userinfo
# AUTH_OPENID_PROVIDER_END_SESSION_ENDPOINT: https://op-example.com/logout
# AUTH_OPENID_PROVIDER_SIGNATURE_ALG: HS256
# AUTH_OPENID_PROVIDER_SIGNATURE_KEY: None
# AUTH_OPENID_SCOPES: "openid profile email"
# AUTH_OPENID_ID_TOKEN_MAX_AGE: 60
# AUTH_OPENID_ID_TOKEN_INCLUDE_CLAIMS: True
# AUTH_OPENID_USE_STATE: True
# AUTH_OPENID_USE_NONCE: True
# AUTH_OPENID_SHARE_SESSION: True
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_ALWAYS_UPDATE_USER: True# Use Radius authorization
# 使用Radius来认证
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET:# CAS 配置
# AUTH_CAS': False,
# CAS_SERVER_URL': "http://host/cas/",
# CAS_ROOT_PROXIED_AS': 'http://jumpserver-host:port',
# CAS_LOGOUT_COMPLETELY': True,
# CAS_VERSION': 3,# LDAP/AD settings
# LDAP 搜索分页数量
# AUTH_LDAP_SEARCH_PAGED_SIZE: 1000
#
# 定时同步用户
# 启用 / 禁用
# AUTH_LDAP_SYNC_IS_PERIODIC: True
# 同步间隔 (单位: 时) (优先)
# AUTH_LDAP_SYNC_INTERVAL: 12
# Crontab 表达式
# AUTH_LDAP_SYNC_CRONTAB: * 6 * * *
#
# LDAP 用户登录时仅允许在用户列表中的用户执行 LDAP Server 认证
# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False
#
# LDAP 认证时如果日志中出现以下信息将参数设置为 0 (详情参见:https://www.python-ldap.org/en/latest/faq.html)
# In order to perform this operation a successful bind must be completed on the connection
# AUTH_LDAP_OPTIONS_OPT_REFERRALS: -1# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver# Perm show single asset to ungrouped node
# 是否把未授权节点资产放入到 未分组 节点中
# PERM_SINGLE_ASSET_TO_UNGROUP_NODE: False
#
# 同一账号仅允许在一台设备登录
# USER_LOGIN_SINGLE_MACHINE_ENABLED: False
#
# 启用定时任务
# PERIOD_TASK_ENABLE: True
#
# 启用二次复合认证配置
# LOGIN_CONFIRM_ENABLE: False
#
# Windows 登录跳过手动输入密码
# WINDOWS_SKIP_ALL_MANUAL_PASSWORD: False

处理国际化:

rm -f apps/locale/zh/LC_MESSAGES/django.mo
python apps/manage.py compilemessages

启动core,后台运行可以-d,./jms start -d

./jms start

Lina编译配置

Lina 是 JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成。

环境要求:node =12.20.0 其他版本应该也行,不过后面的luna好像对node版本有要求,所以最好还是安装此版本

cd lina-v2.15.3

安装node

centos7和ubuntu20.04都使用下面命令进行安装:

wget https://npm.taobao.org/mirrors/node/v12.20.0/node-v12.20.0-linux-x64.tar.xz
tar -xf node-v12.20.0-linux-x64.tar.xz
mv node-v12.20.0-linux-x64 /usr/local/node
chown -R root:root /usr/local/node
export PATH=/usr/local/node/bin:$PATH
echo 'export PATH=/usr/local/node/bin:$PATH' >> ~/.bashrc
node -v

v12.20.0

安装依赖

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.orgnpm install -g yarn
yarn install

修改配置文件

vi .env.development
# 全局环境变量 请勿随意改动
ENV = 'development'# base api
VUE_APP_BASE_API = ''
VUE_APP_PUBLIC_PATH = '/ui/'# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
# It only does one thing by converting all import() to require().
# This configuration can significantly increase the speed of hot updates,
# when you have a large number of pages.
# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.jsVUE_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://localhost:8080'  # 修改成 Core 的 url 地址
VUE_APP_CORE_WS = 'ws://localhost:8070'
VUE_APP_ENV = 'development'

如果只是调试则使用如下命令运行,运行成功后会显示临时地址和端口号进行访问lina前端

yarn serve

如果是构建lina,使用如下命令进行编译生成lina包,直接和nginx部署

yarn build:prod

编译完成后在目录下面会生成lina文件夹,配合jumpserver.conf的lina配置部分进行配置即可,配置如下

location /ui/ {try_files $uri / /ui/index.html;alias /opt/lina-v2.15.3/lina/; #此地址是最后编译完成后生成的lina文件夹地址,根据自己情况进行修改路径
}

luna编译配置

Luna 是 JumpServer 的前端 UI 项目,主要使用 Angular CLI 完成。

环境要求:node =12.20.0 ,前面lina已经配置安装了,此时不用再安装

cd luna-v2.15.3

安装依赖

npm install
npm install --dev
npm rebuild node-sass

修改配置文件:

vi proxy.conf.json
{"/koko": {"target": "http://localhost:5000",  # KoKo 地址"secure": false,"ws": true},"/media/": {"target": "http://localhost:8080",  # Core 地址"secure": false,"changeOrigin": true},"/api/": {"target": "http://localhost:8080",  # Core 地址"secure": false,                    # https ssl 需要开启"changeOrigin": true},"/core": {"target": "http://localhost:8080",  # Core 地址"secure": false,"changeOrigin": true},"/static": {"target": "http://localhost:8080",  # Core 地址"secure": false,"changeOrigin": true},"/lion": {"target": "http://localhost:9529",  # Lion 地址"secure": false,"pathRewrite": {"^/lion/monitor": "/monitor"},"ws": true,"changeOrigin": true},"/omnidb": {"target": "http://localhost:8082","secure": false,"ws": true,"changeOrigin": true}
}

同lina一样,如果只是调试运行,运行如下命令:

ng servre

备注:如果提示没得ng,执行如下命令安装

sudo apt remove ng-common
sudo npm uninstall -g @angular/cli
sudo rm /usr/local/bin/ng
sudo npm install -g @angular/cli

如果是构建luna,则运行如下命令

ng build --prod

构建完成后,在目录下会生成dist文件夹,配合jumpserver.conf的lina配置部分进行配置即可,配置如下

location /luna/ {try_files $uri / /index.html;alias /opt/luna-2.15.3/dist/; #该目录为构建完成后生成的luna前端构建目录}

Koko编译配置

Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。

环境要求:go = 1.15

cd koko-v2.15.3

安装go,centos7和Ubuntu20.04都使用下面命令进行安装

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
go version

go version go1.15 linux/amd64

编译:

make

备注:该Makefile的文件是编译了linux的x86版本、Linux arm版本和macoos版本,最后三个压缩包,因为我Ubuntu系统,所以选择Linux amd64版本,解压,用户可以根据自己的编译环境修改Makefile文件,只编译linux的版本,减少无用功,然后运行如下命令:运行命令之前,先配置文件:

cp config_example.yml config.yml
vi config.yml
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: # Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080   # Core 的地址# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: ********  # 和 Core config.yml 的值保持一致# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0# 监听的SSH端口号, 默认2222
SSHD_PORT: 2222            # 使用 0.0.0.0:2222# 监听的HTTP/WS端口号,默认5000
HTTPD_PORT: 5000           # 使用 0.0.0.0:5000# 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
# 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY: null# ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
# ACCESS_KEY_FILE: data/keys/.access_key# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG           # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR# SSH连接超时时间 (default 15 seconds)
# SSH_TIMEOUT: 15# 语言 [en,zh]
# LANGUAGE_CODE: zh# SFTP的根目录, 可选 /tmp, Home其他自定义目录
# SFTP_ROOT: /tmp# SFTP是否显示隐藏文件
# SFTP_SHOW_HIDDEN_FILE: false# 是否复用和用户后端资产已建立的连接(用户不会复用其他用户的连接)
# REUSE_CONNECTION: true# 资产加载策略, 可根据资产规模自行调整. 默认异步加载资产, 异步搜索分页; 如果为all, 则资产全部加载, 本地搜索分页.
# ASSET_LOAD_POLICY:# zip压缩的最大额度 (单位: M)
# ZIP_MAX_SIZE: 1024M# zip压缩存放的临时目录 /tmp
# ZIP_TMP_PATH: /tmp# 向 SSH Client 连接发送心跳的时间间隔 (单位: 秒),默认为30, 0则表示不发送
# CLIENT_ALIVE_INTERVAL: 30# 向资产发送心跳包的重试次数,默认为3
# RETRY_ALIVE_COUNT_MAX: 3# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local# Redis配置
# REDIS_HOST: 127.0.0.1      # 如果需要部署多个 koko, 需要通过 redis 来保持会话
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_CLUSTERS:
# REDIS_DB_ROOM:

然后运行命令:

./koko

lion编译配置

Lion 使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。

环境要求:core = v2.15.3 guacd=1.3.0

cd guacamole-server-1.3.0/

安装依赖包

centos7环境

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

ubuntu20.04

apt-get install -y libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev
apt-get install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libwebsockets-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev

构建guacd

./configure --with-init-dir=/etc/init.d
make
make install
ldconfig

备注:如果希望使用 systemd 管理, 可以使用 ./configure --with-systemd-dir=/etc/systemd/system/

编译lion:

cd lion-v2.15.3-linux-amd64

修改配置文件:

cp config_example.yml config.yml
vi config.yml
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: # Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080   # Core 的地址# Bootstrap Token, 预共享秘钥, 用来注册使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: ********  # 和 Core config.yml 的值保持一致# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0# 监听的HTTP/WS端口号,默认8081
HTTPD_PORT: 8081# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG           # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR# Guacamole Server ip,默认127.0.0.1
# GUA_HOST: 127.0.0.1# Guacamole Server 端口号,默认4822
# GUA_PORT: 4822# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local# Redis配置
# REDIS_HOST: 127.0.0.1
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_DB_ROOM:

启动guacd:

/etc/init.d/guacd start

如果是system管理使用如下命令

systemctl start guacd

启动lion

./lion

nginx配置

配置文件为当前文件夹的jumpserver.conf

配置好nginx配置文件后,需要重启nginx服务,nginx配置自行进行配置,此处不做详细配置

systemctl restart nginx.service

jumpserver.conf里面的内容如下所示:

server {listen 8000;#server_name _;client_max_body_size 5000m;# Luna 配置location /luna/ {#proxy_pass http://localhost:4200;    try_files $uri / /index.html;alias /opt/luna-2.15.3/;}# Core data 静态资源location /media/replay/ {add_header Content-Encoding gzip;root /opt/jumpserver-v2.15.3/data/;}location /media/ {root /opt/jumpserver-v2.15.3/data/;}location /static/ {root /opt/jumpserver-v2.15.3/data/;}# KoKo Lion 配置location /koko/ {proxy_pass       http://localhost: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://localhost: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://localhost: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://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;}location /core/ {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;}# 前端 Linalocation /ui/ {try_files $uri / /ui/index.html;alias /opt/lina-v2.15.3/lina/;#proxy_pass http://localhost: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;}
}

堡垒机Jumpserver的源码部署教程相关推荐

  1. Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇

    Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇 由于来源身份不明.越权操作.密码泄露.数据被窃.违规操作等因素都可能会使运营的业务系统面临严重威胁,一旦发生事故,如果 ...

  2. Centos下堡垒机Jumpserver V3.0环境部署

    Centos下堡垒机Jumpserver V3.0环境部署1)关闭jumpserver部署机的iptables和selinux [root@test-vm001 ~]# cd /opt [root@t ...

  3. (一)堡垒机Jumpserver 2.0.1 部署

    目录 Jumpserver概述 一.安装环境准备 1.1 Jumpserver 环境要求: 1.2 关闭 selinux 和防火墙 1.3 准备 Python3 和 Python 虚拟环境 1.3.1 ...

  4. 开源跳板机(堡垒机)Jumpserver v2.0.0 部署篇

    Jumpserver 是一款基于Python+Django开发的开源堡垒机系统,使用LDAP统一认证,同时还有命令审计功能. 优势:         1.所有服务器使用LDAP统一认证.        ...

  5. 正版授权WiFi大师4.0.5 专业版流量主小程序源码部署教程

    新版WiFi小程序WiFi大师版流量主搭建独立源码WiFi分销源码  独立版 2022年最火的地推项目WiFi大师,扫码直连WiFi,给商家客户代理绝对的便利. WIFI地推,绝对是2022年最火爆的 ...

  6. 《计算机网络》课程小程序的设计与实现 报告+项目源码+部署教程

    摘 要 随着智能移动终端设备的普及,移动端应用已经渗透于各行各业,其中在线教育移动应用中,面向计算机学科这一细分领域的移动应用还没有龙头产品.微信小程序作为微信社交"生态"的重要组 ...

  7. 基于改进YOLOv5的挖机铲斗缺陷检测系统(源码&教程)

    1.研究背景 针对现有电铲斗齿检测方法存在实时性较差.误报率较高等问题,提出了一种基于机器视觉的电铲斗齿缺失检测方法.该方法利用红外热像仪采集铲斗图像,基于模板匹配原理对复杂背景下斗齿的目标区域进行准 ...

  8. jumpserver 使用教程_开源堡垒机 Jumpserver 入门教程

    原标题:开源堡垒机 Jumpserver 入门教程 背景 笔者最近想起此前公司使用过的堡垒机系统,觉得用的很方便,而现在的公司并没有搭建此类系统,想着以后说不定可以用上:而且最近也有点时间,因此来了搭 ...

  9. 堡垒机jumpserver集群部署

    本文参考老广二次开发后的堡垒机部署方案,在此基础上进行集群部署,提高其可靠性.尽管国外已经有类似的功能的堡垒机的发布,但是还是要感谢老广在百忙之中开发出更加实用的堡垒机. 本文内容虽然亲测,但内容难免 ...

最新文章

  1. Java设计模式—责任链模式
  2. 线上内核_线上研讨会 |了解图书馆转型动态,建设智慧图书馆
  3. python简单爬虫手机号_python手机号前7位归属地爬虫代码实例
  4. 惊!使用nw.js将vue项目打包为可在xp系统运行的桌面程序
  5. 计算机工作表中按升序排列,表格打乱顺序怎么按顺序排列_怎么把表格内容按顺序排列图文步骤...
  6. 条形码转化成二维码_在线条形码生成器
  7. Mac 安装 nvm 教程
  8. 19年11月份,我为什么从上一家公司离职
  9. VR虚拟展厅产品展示如何实现的
  10. 中国科大的毕业生去向
  11. audio: /dev/dsp: No such file or directory madplay
  12. 地牢猎手显示无法连接服务器,地牢猎手5无法连接服务器
  13. ftp下载文件失败问题记录
  14. 人工智能的核心技术是什么
  15. C练题笔记之:Leetcode-565. 数组嵌套
  16. 【qttabbar】常用设置分享
  17. 谷歌人工智能打败围棋大师,到底什么是智能?
  18. java自动下发工单源码_PESCMS Ticket开源客服工单系统 v1.3.5
  19. 去中心化与无平台成员:与 Nasheq.eth、Ivan Manchev和Rob Edwards开启 “智能钱包”系列对话!
  20. vue 3.0 Refs详解

热门文章

  1. python 腾讯企业邮箱 535, b'Error: authentication failed, system busy'
  2. php搜索本地文件名称资源数据
  3. ios开发发布测试版本
  4. EwoMail邮件系统忘记管理员密码的处理
  5. 你不知道的 Chrome 浏览器 骚操作
  6. oracle更改字段类型 有数据无数据的时候,修改字段长度,增加字段
  7. 中国高端旅游人群洞察报告.pdf
  8. 计算机对语文教学的影响,【计算机应用论文】计算机情景创设对小学语文教学质量影响(共3742字)...
  9. 率土之滨服务器维护多久,率土之滨维护多久,玩家沦陷后多久消失
  10. 结构力学-图乘法-梯形公式【笔记】