Jumpserver Documentation

Size: px
Start display at page:

Download "Jumpserver Documentation"

Transcription

1 Jumpserver Documentation 发布 latest Jumpserver team 2019 年 05 月 21 日

2

3 Contents 1 总体介绍 3 2 安装文档 极速安装 Docker 安装 一步一步安装 (CentOS) 一步一步安装 (Ubuntu) 一站式 分布式安装文档 安装后优化文档 开机自启 更新升级 服务迁移 管理文档 快速入门 用户管理 资产管理 权限管理 会话管理 作业中心 日志审计 系统设置 用户文档 我的资产 命令执行 个人信息 Web 终端 文件管理 开发文档 REST API 规范约定 Jumpserver 项目规范 (Draft) 项目骨架 API 文档 贡献者 159 i

4 7 联系方式 商业支持 QQ 群 Github 官网 Demo 邮件 Snapshot 截图 仪表盘 用户管理 资产管理 Linux 终端 Windows 终端 FAQ MFA 使用说明 LDAP 使用说明 sftp 使用说明 Telnet 使用说明 Docker 使用说明 Radius 使用说明 安装过程中常见的问题 升级常见问题 Firewalld 使用说明 RDP 协议资产连接说明 SSH 协议资产连接说明 添加组织及组织管理员说明 其他问题 更新日志 beta beta ii

5 iii

6 iv

7 目录 : Contents 1

8 2 Contents

9 CHAPTER 1 总体介绍 欢迎来到 Jumpserver 文档 Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统 Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观 用户体验好 Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展 无并发访问限制 Jumpserver 现已支持管理 SSH Telnet RDP VNC 协议资产 改变世界, 从一点点开始 3

10 4 Chapter 1. 总体介绍

11 CHAPTER 2 安装文档 2.1 极速安装 自建服务器极速安装 说明 全新安装的 Centos7 系统 保持服务器网络畅通 开始安装 以下命令均在一个终端里面执行 $ echo -e "\033[31m 1. 防火墙 Selinux 设置 \033[0m" \ && if [ "$(systemctl status firewalld grep running)"!= "" ]; then firewall-cmd -- zone=public --add-port=80/tcp --permanent; firewall-cmd --zone=public --add- port=2222/tcp --permanent; firewall-cmd --permanent --add-rich-rule="rule family= "ipv4" source address=" /16" port protocol="tcp" port="8080" accept"; firewall-cmd --reload; fi \ && if [ "$(getenforce)"!= "Disabled" ]; then setsebool -P httpd_can_network_ connect 1; fi $ echo -e "\033[31m 2. 部署环境 \033[0m" \ && yum update -y \ && ln -sf /usr/share/zoneinfo/asia/shanghai /etc/localtime \ && yum -y install kde-l10n-chinese \ && localedef -c -f UTF-8 -i zh_cn zh_cn.utf-8 \ && export LC_ALL=zh_CN.UTF-8 \ && echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf \ && yum -y install wget gcc epel-release git \ && yum install -y yum-utils device-mapper-persistent-data lvm2 \ && yum-config-manager --add-repo docker-ce.repo \ ( 下页继续 ) 5

12 && yum makecache fast \ && rpm --import \ && echo -e "[nginx-stable]\nname=nginx stable repo\nbaseurl= packages/centos/\$releasever/\$basearch/\ngpgcheck=1\nenabled=1\ngpgkey= nginx.org/keys/nginx_signing.key" > /etc/yum.repos.d/nginx.repo \ && rpm --import \ && yum -y install redis mariadb mariadb-devel mariadb-server nginx docker-ce \ && systemctl enable redis mariadb nginx docker \ && systemctl start redis mariadb \ && yum -y install python36 python36-devel \ && python3.6 -m venv /opt/py3 ( 续上页 ) $ echo -e "\033[31m 3. 下载组件 \033[0m" \ && cd /opt \ && if [! -d "/opt/jumpserver" ]; then git clone --depth=1 jumpserver/jumpserver.git; fi \ && if [! -f "/opt/luna.tar.gz" ]; then wget luna/1.4.10/luna.tar.gz; tar xf luna.tar.gz; chown -R root:root luna; fi \ && yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) \ && source /opt/py3/bin/activate \ && pip install --upgrade pip setuptools -i \ && pip install -r /opt/jumpserver/requirements/requirements.txt -i aliyun.com/pypi/simple/ \ && curl -ssl sh -s m.daocloud.io \ && systemctl restart docker \ && docker pull jumpserver/jms_coco: \ && docker pull jumpserver/jms_guacamole: \ && rm -rf /etc/nginx/conf.d/default.conf \ && curl -o /etc/nginx/conf.d/jumpserver.conf nginx/conf.d/jumpserver.conf $ echo -e "\033[31m 4. 处理配置文件 \033[0m" \ && if [ "$DB_PASSWORD" = "" ]; then DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24`; fi \ && if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; fi \ && if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; fi \ && if [ "$Server_IP" = "" ]; then Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1`; fi \ && if [! -d "/var/lib/mysql/jumpserver" ]; then mysql -uroot -e "create database jumpserver default charset 'utf8';grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD';flush privileges;"; fi \ && if [! -f "/opt/jumpserver/config.yml" ]; then cp /opt/jumpserver/config_example. yml /opt/jumpserver/config.yml; 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; fi $ echo -e "\033[31m 5. 启动 Jumpserver \033[0m" \ ( 下页继续 ) 6 Chapter 2. 安装文档

13 ( 续上页 ) && systemctl start nginx \ && cd /opt/jumpserver \ &&./jms start all -d \ && docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: \ && docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: \ && echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" \ && echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" \ && echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" \ && echo -e "\033[31m 你的服务器 IP 是 $Server_IP \033[0m" \ && echo -e "\033[31m 请打开浏览器访问 用户名 :admin 密码 :admin \033[0m" $ echo -e "\033[31m 6. 配置自启 \033[0m" \ && if [! -f "/usr/lib/systemd/system/jms.service" ]; then curl -o /usr/lib/systemd/ system/jms.service chmod 755 /usr/lib/systemd/system/jms.service; fi \ && if [! -f "/opt/start_jms.sh" ]; then curl -o /opt/start_jms.sh jumpserver.org/download/shell/centos/start_jms.sh; fi \ && if [! -f "/opt/stop_jms.sh" ]; then curl -o /opt/stop_jms.sh jumpserver.org/download/shell/centos/stop_jms.sh; fi \ && if [ "$(cat /etc/rc.local grep start_jms.sh)" == "" ]; then echo "sh /opt/ start_jms.sh" >> /etc/rc.local; chmod +x /etc/rc.d/rc.local; fi \ && echo -e "\033[31m 启动停止的脚本在 /opt 目录下, 如果自启失败可以手动启动 \033[0m" 腾讯云服务器极速安装 说明 全新安装的 Centos7 系统 保持服务器网络畅通 开始安装 以下命令均在一个终端里面执行 $ echo -e "\033[31m 1. 防火墙 Selinux 设置 \033[0m" \ && if [ "$(systemctl status firewalld grep running)"!= "" ]; then firewall-cmd -- zone=public --add-port=80/tcp --permanent; firewall-cmd --zone=public --add- port=2222/tcp --permanent; firewall-cmd --permanent --add-rich-rule="rule family= "ipv4" source address=" /16" port protocol="tcp" port="8080" accept"; firewall-cmd --reload; fi \ && if [ "$(getenforce)"!= "Disabled" ]; then setsebool -P httpd_can_network_ connect 1; fi $ echo -e "\033[31m 2. 部署环境 \033[0m" \ && yum update -y \ && yum -y install wget gcc epel-release git \ && curl -o /etc/yum.repos.d/epel.repo repo \ && sed -i "s/mirrors.cloud.tencent.com/mirrors.tencentyun.com/g" /etc/yum.repos.d/ epel.repo \ && yum clean all \ ( 下页继续 ) 2.1. 极速安装 7

14 ( 续上页 ) && yum makecache \ && yum install -y yum-utils device-mapper-persistent-data lvm2 \ && curl -o /etc/yum.repos.d/docker-ce.repo docker-ce.repo \ && sed -i "s@ /etc/yum.repos.d/docker-ce.repo \ && yum makecache fast \ && rpm --import \ && echo -e "[nginx-stable]\nname=nginx stable repo\nbaseurl= packages/centos/\$releasever/\$basearch/\ngpgcheck=1\nenabled=1\ngpgkey= nginx.org/keys/nginx_signing.key" > /etc/yum.repos.d/nginx.repo \ && rpm --import \ && yum -y install redis mariadb mariadb-devel mariadb-server nginx docker-ce \ && systemctl enable redis mariadb nginx docker \ && systemctl start redis mariadb \ && yum -y install python36 python36-devel \ && python3.6 -m venv /opt/py3 $ echo -e "\033[31m 3. 下载组件 \033[0m" \ && cd /opt \ && if [! -d "/opt/jumpserver" ]; then git clone --depth=1 jumpserver/jumpserver.git; fi \ && if [! -f "/opt/luna.tar.gz" ]; then wget luna/1.4.10/luna.tar.gz; tar xf luna.tar.gz; chown -R root:root luna; fi \ && yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) \ && source /opt/py3/bin/activate \ && pip install --upgrade pip setuptools -i simple \ && pip install -r /opt/jumpserver/requirements/requirements.txt -i tencentyun.com/pypi/simple \ && curl -ssl sh -s m.daocloud.io \ && systemctl restart docker \ && docker pull jumpserver/jms_coco: \ && docker pull jumpserver/jms_guacamole: \ && rm -rf /etc/nginx/conf.d/default.conf \ && curl -o /etc/nginx/conf.d/jumpserver.conf nginx/conf.d/jumpserver.conf $ echo -e "\033[31m 4. 处理配置文件 \033[0m" \ && if [ "$DB_PASSWORD" = "" ]; then DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24`; fi \ && if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; fi \ && if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; fi \ && if [ "$Server_IP" = "" ]; then Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1`; fi \ && if [! -d "/var/lib/mysql/jumpserver" ]; then mysql -uroot -e "create database jumpserver default charset 'utf8';grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD';flush privileges;"; fi \ && if [! -f "/opt/jumpserver/config.yml" ]; then cp /opt/jumpserver/config_example. yml /opt/jumpserver/config.yml; 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: 8 /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml; fi Chapter 2. 安装文档

15 ( 续上页 ) $ echo -e "\033[31m 5. 启动 Jumpserver \033[0m" \ && systemctl start nginx \ && cd /opt/jumpserver \ &&./jms start all -d \ && docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: \ && docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: \ && echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" \ && echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" \ && echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" \ && echo -e "\033[31m 你的服务器 IP 是 $Server_IP \033[0m" \ && echo -e "\033[31m 请在安全组里面放行 80 和 2222 端口 \033[0m" \ && echo -e "\033[31m 请打开浏览器访问公网 80 端口用户名 :admin 密码 :admin \033[0m" $ echo -e "\033[31m 6. 配置自启 \033[0m" \ && if [! -f "/usr/lib/systemd/system/jms.service" ]; then curl -o /usr/lib/systemd/ system/jms.service chmod 755 /usr/lib/systemd/system/jms.service; fi \ && if [! -f "/opt/start_jms.sh" ]; then curl -o /opt/start_jms.sh jumpserver.org/download/shell/centos/start_jms.sh; fi \ && if [! -f "/opt/stop_jms.sh" ]; then curl -o /opt/stop_jms.sh jumpserver.org/download/shell/centos/stop_jms.sh; fi \ && if [ "$(cat /etc/rc.local grep start_jms.sh)" == "" ]; then echo "sh /opt/ start_jms.sh" >> /etc/rc.local; chmod +x /etc/rc.d/rc.local; fi \ && echo -e "\033[31m 启动停止的脚本在 /opt 目录下, 如果自启失败可以手动启动 \033[0m" 阿里云服务器极速安装 说明 全新安装的 Centos7 系统 保持服务器网络畅通 开始安装 以下命令均在一个终端里面执行 $ echo -e "\033[31m 1. 防火墙 Selinux 设置 \033[0m" \ && if [ "$(systemctl status firewalld grep running)"!= "" ]; then firewall-cmd -- zone=public --add-port=80/tcp --permanent; firewall-cmd --zone=public --add- port=2222/tcp --permanent; firewall-cmd --permanent --add-rich-rule="rule family= "ipv4" source address=" /16" port protocol="tcp" port="8080" accept"; firewall-cmd --reload; fi \ && if [ "$(getenforce)"!= "Disabled" ]; then setsebool -P httpd_can_network_ connect 1; fi $ echo -e "\033[31m 2. 部署环境 \033[0m" \ && yum update -y \ && yum -y install wget gcc epel-release git \ && curl -o /etc/yum.repos.d/epel.repo \ ( 下页继续 ) 2.1. 极速安装 9

16 && yum clean all \ && yum makecache \ && yum install -y yum-utils device-mapper-persistent-data lvm2 \ && yum-config-manager --add-repo docker-ce.repo \ && yum makecache fast \ && rpm --import \ && echo -e "[nginx-stable]\nname=nginx stable repo\nbaseurl= packages/centos/\$releasever/\$basearch/\ngpgcheck=1\nenabled=1\ngpgkey= nginx.org/keys/nginx_signing.key" > /etc/yum.repos.d/nginx.repo \ && rpm --import \ && yum -y install redis mariadb mariadb-devel mariadb-server nginx docker-ce \ && systemctl enable redis mariadb nginx docker \ && systemctl start redis mariadb \ && yum -y install python36 python36-devel \ && python3.6 -m venv /opt/py3 ( 续上页 ) $ echo -e "\033[31m 3. 下载组件 \033[0m" \ && cd /opt \ && if [! -d "/opt/jumpserver" ]; then git clone --depth=1 jumpserver/jumpserver.git; fi \ && if [! -f "/opt/luna.tar.gz" ]; then wget luna/1.4.10/luna.tar.gz; tar xf luna.tar.gz; chown -R root:root luna; fi \ && yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) \ && source /opt/py3/bin/activate \ && pip install --upgrade pip setuptools -i \ && pip install -r /opt/jumpserver/requirements/requirements.txt -i aliyun.com/pypi/simple/ \ && curl -ssl sh -s m.daocloud.io \ && systemctl restart docker \ && docker pull jumpserver/jms_coco: \ && docker pull jumpserver/jms_guacamole: \ && rm -rf /etc/nginx/conf.d/default.conf \ && curl -o /etc/nginx/conf.d/jumpserver.conf nginx/conf.d/jumpserver.conf $ echo -e "\033[31m 4. 处理配置文件 \033[0m" \ && if [ "$DB_PASSWORD" = "" ]; then DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24`; fi \ && if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; fi \ && if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; fi \ && if [ "$Server_IP" = "" ]; then Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1`; fi \ && if [! -d "/var/lib/mysql/jumpserver" ]; then mysql -uroot -e "create database jumpserver default charset 'utf8';grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD';flush privileges;"; fi \ && if [! -f "/opt/jumpserver/config.yml" ]; then cp /opt/jumpserver/config_example. yml /opt/jumpserver/config.yml; 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; fi 10 Chapter 2. 安装文档

17 ( 续上页 ) $ echo -e "\033[31m 5. 启动 Jumpserver \033[0m" \ && systemctl start nginx \ && cd /opt/jumpserver \ &&./jms start all -d \ && docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: \ && docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: \ && echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" \ && echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" \ && echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" \ && echo -e "\033[31m 你的服务器 IP 是 $Server_IP \033[0m" \ && echo -e "\033[31m 请在安全组里面放行 80 和 2222 端口 \033[0m" \ && echo -e "\033[31m 请打开浏览器访问公网 80 端口用户名 :admin 密码 :admin \033[0m" $ echo -e "\033[31m 6. 配置自启 \033[0m" \ && if [! -f "/usr/lib/systemd/system/jms.service" ]; then curl -o /usr/lib/systemd/ system/jms.service chmod 755 /usr/lib/systemd/system/jms.service; fi \ && if [! -f "/opt/start_jms.sh" ]; then curl -o /opt/start_jms.sh jumpserver.org/download/shell/centos/start_jms.sh; fi \ && if [! -f "/opt/stop_jms.sh" ]; then curl -o /opt/stop_jms.sh jumpserver.org/download/shell/centos/stop_jms.sh; fi \ && if [ "$(cat /etc/rc.local grep start_jms.sh)" == "" ]; then echo "sh /opt/ start_jms.sh" >> /etc/rc.local; chmod +x /etc/rc.d/rc.local; fi \ && echo -e "\033[31m 启动停止的脚本在 /opt 目录下, 如果自启失败可以手动启动 \033[0m" 华为云服务器极速安装 说明 全新安装的 Centos7 系统 保持服务器网络畅通 开始安装 以下命令均在一个终端里面执行 $ echo -e "\033[31m 1. 防火墙 Selinux 设置 \033[0m" \ && if [ "$(systemctl status firewalld grep running)"!= "" ]; then firewall-cmd -- zone=public --add-port=80/tcp --permanent; firewall-cmd --zone=public --add- port=2222/tcp --permanent; firewall-cmd --permanent --add-rich-rule="rule family= "ipv4" source address=" /16" port protocol="tcp" port="8080" accept"; firewall-cmd --reload; fi \ && if [ "$(getenforce)"!= "Disabled" ]; then setsebool -P httpd_can_network_ connect 1; fi $ echo -e "\033[31m 2. 部署环境 \033[0m" \ && sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/centos-base.repo \ && sed -i "s/mirrorlist=http/#mirrorlist=http/g" /etc/yum.repos.d/centos-base.repo \ && sed -i "s@ /etc/yum. repos.d/centos-base.repo \ ( 下页继续 ) 2.1. 极速安装 11

18 ( 续上页 ) && yum clean all \ && yum makecache \ && yum update -y \ && yum -y install wget gcc epel-release git \ && sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo \ && sed -i "s/mirrorlist/#mirrorlist/g" /etc/yum.repos.d/epel.repo \ && sed -i "s@ " /etc/yum.repos.d/epel.repo \ && yum clean all \ && yum makecache \ && yum install -y yum-utils device-mapper-persistent-data lvm2 \ && yum-config-manager --add-repo docker-ce.repo \ && yum makecache fast \ && rpm --import \ && echo -e "[nginx-stable]\nname=nginx stable repo\nbaseurl= packages/centos/\$releasever/\$basearch/\ngpgcheck=1\nenabled=1\ngpgkey= nginx.org/keys/nginx_signing.key" > /etc/yum.repos.d/nginx.repo \ && rpm --import \ && yum -y install redis mariadb mariadb-devel mariadb-server nginx docker-ce \ && systemctl enable redis mariadb nginx docker \ && systemctl start redis mariadb \ && yum -y install python36 python36-devel \ && python3.6 -m venv /opt/py3 $ echo -e "\033[31m 3. 下载组件 \033[0m" \ && cd /opt \ && if [! -d "/opt/jumpserver" ]; then git clone --depth=1 jumpserver/jumpserver.git; fi \ && if [! -f "/opt/luna.tar.gz" ]; then wget luna/1.4.10/luna.tar.gz; tar xf luna.tar.gz; chown -R root:root luna; fi \ && yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) \ && source /opt/py3/bin/activate \ && pip install --upgrade pip setuptools -i repository/pypi/simple \ && pip install -r /opt/jumpserver/requirements/requirements.txt -i huaweicloud.com/repository/pypi/simple \ && curl -ssl sh -s m.daocloud.io \ && systemctl restart docker \ && docker pull jumpserver/jms_coco: \ && docker pull jumpserver/jms_guacamole: \ && rm -rf /etc/nginx/conf.d/default.conf \ && curl -o /etc/nginx/conf.d/jumpserver.conf nginx/conf.d/jumpserver.conf $ echo -e "\033[31m 4. 处理配置文件 \033[0m" \ && if [ "$DB_PASSWORD" = "" ]; then DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24`; fi \ && if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; fi \ && if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; fi \ && if [ "$Server_IP" = "" ]; then Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1`; fi \ ( 下页继续 ) 12 Chapter 2. 安装文档

19 ( 续上页 ) && if [! -d "/var/lib/mysql/jumpserver" ]; then mysql -uroot -e "create database jumpserver default charset 'utf8';grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD';flush privileges;"; fi \ && if [! -f "/opt/jumpserver/config.yml" ]; then cp /opt/jumpserver/config_example. yml /opt/jumpserver/config.yml; 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; fi $ echo -e "\033[31m 5. 启动 Jumpserver \033[0m" \ && systemctl start nginx \ && cd /opt/jumpserver \ &&./jms start all -d \ && docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: \ && docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= $Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: \ && echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" \ && echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" \ && echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" \ && echo -e "\033[31m 你的服务器 IP 是 $Server_IP \033[0m" \ && echo -e "\033[31m 请在安全组里面放行 80 和 2222 端口 \033[0m" \ && echo -e "\033[31m 请打开浏览器访问公网 80 端口用户名 :admin 密码 :admin \033[0m" $ echo -e "\033[31m 6. 配置自启 \033[0m" \ && if [! -f "/usr/lib/systemd/system/jms.service" ]; then curl -o /usr/lib/systemd/ system/jms.service chmod 755 /usr/lib/systemd/system/jms.service; fi \ && if [! -f "/opt/start_jms.sh" ]; then curl -o /opt/start_jms.sh jumpserver.org/download/shell/centos/start_jms.sh; fi \ && if [! -f "/opt/stop_jms.sh" ]; then curl -o /opt/stop_jms.sh jumpserver.org/download/shell/centos/stop_jms.sh; fi \ && if [ "$(cat /etc/rc.local grep start_jms.sh)" == "" ]; then echo "sh /opt/ start_jms.sh" >> /etc/rc.local; chmod +x /etc/rc.d/rc.local; fi \ && echo -e "\033[31m 启动停止的脚本在 /opt 目录下, 如果自启失败可以手动启动 \033[0m" 2.2 Docker 安装 Jumpserver 封装了一个 All in one Docker, 可以快速启动 该镜像集成了所需要的组件, 支持使用外置 Database 和 Redis Tips: 不建议在生产中使用, 因为所有软件都打包到一个 Docker 中了, 不是 Docker 最佳实践 生产环境部署建议参考进阶安装文档 快速启动 使用 root 命令行输入 2.2. Docker 安装 13

20 # 生成随机加密秘钥, 勿外泄 $ if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi $ if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom tr -dc A- Za-z0-9 head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi $ docker run --name jms_all -d -p 80:80 -p 2222:2222 -e SECRET_KEY=$SECRET_KEY -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_all:latest # macos 生成随机 key 可以用下面的命令 $ if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/ urandom head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bash_profile; echo $SECRET_KEY; else echo $SECRET_KEY; fi $ if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bash_ profile; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi 环境迁移和更新升级请检查 SECRET_KEY 是否与之前设置一致, 不能随机生成, 否则数据库所有加密的字段均无法解密 访问浏览器访问 : 容器所在服务器 IP> SSH 访问 : ssh -p 2222 < 容器所在服务器 IP> XShell 等工具请添加 connection 连接, 默认 ssh 端口 2222 默认管理员账户 admin 密码 admin 外置数据库要求 mysql 版本需要大于等于 5.6 mariadb 版本需要大于等于 数据库编码要求 uft 创建数据库 创建数据库命令行 # mysql $ create database jumpserver default charset 'utf8'; $ grant all on jumpserver.* to 'jumpserver'@'%' identified by 'weakpassword'; 额外环境变量 SECRET_KEY = ** BOOTSTRAP_TOKEN = ** 14 Chapter 2. 安装文档

21 DB_HOST = mysql_host DB_PORT = 3306 DB_USER = jumpserver DB_PASSWORD = weakpassword DB_NAME = jumpserver REDIS_HOST = REDIS_PORT = 6379 REDIS_PASSWORD = VOLUME /opt/jumpserver/data/media VOLUME /var/lib/mysql $ docker run --name jms_all -d \ -v /opt/mysql:/var/lib/mysql -v /opt/jumpserver:/opt/jumpserver/data/media -p 80:80 \ -p 2222:2222 \ -e SECRET_KEY=xxxxxx \ -e BOOTSTRAP_TOKEN=xxx \ -e DB_HOST= x.x \ -e DB_PORT=3306 \ -e DB_USER=root \ -e DB_PASSWORD=xxx \ -e DB_NAME=jumpserver \ -e REDIS_HOST= x.x \ -e REDIS_PORT=6379 \ -e REDIS_PASSWORD=xxx \ jumpserver/jms_all:latest 仓库地址 一步一步安装 (CentOS) 本文档旨在帮助用户了解各组件之间的关系, 生产环境部署建议参考进阶安装文档 云服务器快速部署参考极速安装 安装过程中遇到问题可参考安装过程中常见的问题 测试推荐环境 CPU: 64 位双核处理器 内存 : 4G DDR3 数据库 :mysql 版本大于等于 5.6 mariadb 版本大于等于 一步一步安装 (CentOS) 15

22 2.3.2 环境 系统 : CentOS 7 IP: 设置 selinux 和防火墙 $ firewall-cmd --zone=public --add-port=80/tcp --permanent # nginx 端口 $ firewall-cmd --zone=public --add-port=2222/tcp --permanent # 用户 SSH 登录端口 coco $ firewall-cmd --reload # 重新载入规则 $ setenforce 0 $ sed -i "s/selinux=enforcing/selinux=disabled/g" /etc/selinux/config # 修改字符集, 否则可能报 input/output error 的问题, 因为日志里打印了中文 $ localedef -c -f UTF-8 -i zh_cn zh_cn.utf-8 $ export LC_ALL=zh_CN.UTF-8 $ echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf 一. 准备 Python3 和 Python 虚拟环境 1.1 安装依赖包 $ yum -y install wget gcc epel-release git 1.2 安装 Python3.6 $ yum -y install python36 python36-devel # 如果下载速度很慢, 可以换国内源 $ wget -O /etc/yum.repos.d/epel.repo $ yum -y install python36 python36-devel 1.3 建立 Python 虚拟环境 因为 CentOS 7 自带的是 Python2, 而 Yum 等工具依赖原来的 Python, 为了不扰乱原来的环境我们来使用 Python 虚拟环境 $ cd /opt $ python3.6 -m venv py3 $ source /opt/py3/bin/activate # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行 (py3) [root@localhost py3] 二. 安装 Jumpserver 2.1 下载或 Clone 项目 项目提交较多 git clone 时较大, 你可以选择去 Github 项目页面直接下载 zip 包 $ cd /opt/ $ git clone --depth= Chapter 2. 安装文档

23 2.2 安装依赖 RPM 包 $ cd /opt/jumpserver/requirements $ yum -y install $(cat rpm_requirements.txt) # 如果没有任何报错请继续 2.3 安装 Python 库依赖 $ pip install --upgrade pip setuptools $ pip install -r requirements.txt # 如果下载速度很慢, 可以换国内源 $ pip install --upgrade pip setuptools -i $ pip install -r requirements.txt -i 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke $ yum -y install redis $ systemctl enable redis $ systemctl start redis 2.5 安装 MySQL 本教程使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置 $ yum -y install mariadb mariadb-devel mariadb-server # centos7 下安装的是 mariadb $ systemctl enable mariadb $ systemctl start mariadb 2.6 创建数据库 Jumpserver 并授权 $ DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24` # 生成随机数据库密码 $ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" $ mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD'; flush privileges;" 2.7 修改 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" ( 下页继续 ) 2.3. 一步一步安装 (CentOS) 17

24 ( 续上页 ) $ vi config.yml # 确认内容有没有错误 # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥生产环境中请修改为随机字符串, 请勿外泄 SECRET_KEY: # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制 BOOTSTRAP_TOKEN: # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: DB_NAME: jumpserver # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: ( 下页继续 ) 18 Chapter 2. 安装文档

25 # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 ( 续上页 ) # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver 2.8 运行 Jumpserver $ cd /opt/jumpserver $./jms start all -d # 后台运行使用 -d 参数./jms start all -d # 新版本更新了运行脚本, 使用方式./jms start stop status all 后台运行请添加 -d 参数 运行不报错, 请继续往下操作 三. 安装 SSH Server 和 WebSocket Server: Coco 3.1 下载或 Clone 项目 $ cd /opt $ source /opt/py3/bin/activate $ git clone --depth= 安装依赖 $ cd /opt/coco/requirements $ yum -y install $(cat rpm_requirements.txt) $ pip install -r requirements.txt # 如果下载速度很慢, 可以换国内源 $ pip install -r requirements.txt -i 修改配置文件并运行 $ cd /opt/coco $ cp config_example.yml config.yml $ sed -i "s/bootstrap_token: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml $ sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml $ vi config.yml 2.3. 一步一步安装 (CentOS) 19

26 # 项目名称, 会用来向 Jumpserver 注册, 识别而已, 不能重复 # NAME: {{ Hostname }} # Jumpserver 项目的 url, api 请求注册会使用 CORE_HOST: # Bootstrap Token, 预共享秘钥, 用来注册 coco 使用的 service account 和 terminal # 请和 jumpserver 配置文件中保持一致, 注册完成后可以删除 BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver> # 启动时绑定的 ip, 默认 # BIND_HOST: # 监听的 SSH 端口号, 默认 2222 # SSHD_PORT: 2222 # 监听的 HTTP/WS 端口号, 默认 5000 # HTTPD_PORT: 5000 # 项目使用的 ACCESS KEY, 默认会注册, 并保存到 ACCESS_KEY_STORE 中, # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret # ACCESS_KEY: null # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中 # ACCESS_KEY_STORE: data/keys/.access_key # 加密密钥 # SECRET_KEY: null # 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL] LOG_LEVEL: ERROR # 日志存放的目录 # LOG_DIR: logs # SSH 白名单 # ALLOW_SSH_USER: all # SSH 黑名单, 如果用户同时在白名单和黑名单, 黑名单优先生效 # BLOCK_SSH_USER: # - # 和 Jumpserver 保持心跳时间间隔 # HEARTBEAT_INTERVAL: 5 # Admin 的名字, 出问题会提示给用户 # ADMINS: '' # SSH 连接超时时间 (default 15 seconds) # SSH_TIMEOUT: 15 # 语言 [en, zh] # LANGUAGE_CODE: zh # SFTP 的根目录, 可选 /tmp, Home 其他自定义目录 # SFTP_ROOT: /tmp ( 下页继续 ) 20 Chapter 2. 安装文档

27 # SFTP 是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false ( 续上页 ) $./cocod start -d # 后台运行使用 -d 参数./cocod start -d # 新版本更新了运行脚本, 使用方式./cocod start stop status 后台运行请添加 -d 参数 四. 安装 Web Terminal 前端 : Luna Luna 已改为纯前端, 需要 Nginx 来运行访问 访问 ( 下载对应版本的 release 包, 直接解压不需要编译 4.1 解压 Luna $ cd /opt $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna 五. 安装 Windows 支持组件 ( 如果不需要管理 windows 资产, 可以直接跳过这一步 ) 5.1 安装依赖 $ rpm --import $ rpm -Uvh nux.noarch.rpm $ yum -y localinstall --nogpgcheck free-release-7.noarch.rpm nonfree-release-7.noarch.rpm $ yum install -y java openjdk libtool $ yum install -y cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel $ yum install -y ffmpeg-devel freerdp-devel freerdp-plugins pango-devel libssh2-devel libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel libvorbis- devel libwebp-devel ghostscript 5.2 编译安装 guacamole 服务 $ cd /opt $ git clone --depth=1 $ cd /opt/docker-guacamole/ $ tar -xf guacamole-server tar.gz $ cd guacamole-server $ autoreconf -fi $./configure --with-init-dir=/etc/init.d $ make && make install $ ln -s /usr/local/lib/freerdp/*.so /usr/lib64/freerdp/ ( 下页继续 ) 2.3. 一步一步安装 (CentOS) 21

28 $ cd.. $ rm -rf guacamole-server $ ldconfig ( 续上页 ) 5.3 配置 Tomcat $ mkdir -p /config/guacamole /config/guacamole/lib /config/guacamole/extensions # 创建 guacamole 目录 $ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver jar /config/guacamole/ extensions/guacamole-auth-jumpserver jar $ ln -sf /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/ guacamole/guacamole.properties # guacamole 配置文件 $ cd /config $ wget tomcat tar.gz $ tar xf apache-tomcat tar.gz $ rm -rf apache-tomcat tar.gz $ mv apache-tomcat tomcat8 $ rm -rf /config/tomcat8/webapps/* $ ln -sf /opt/docker-guacamole/guacamole war /config/tomcat8/webapps/root.war # guacamole client $ sed -i 's/connector port="8080"/connector port="8081"/g' /config/tomcat8/conf/ server.xml # 修改默认端口为 8081 $ sed -i 's/fine/warning/g' /config/tomcat8/conf/logging.properties # 修改 log 等级为 WARNING $ cd /config $ wget gz # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf linux-amd64.tar.gz -C /bin/ $ chmod +x /bin/ssh-forward 5.4 配置环境变量 # 勿多次执行以下环境设置 $ export JUMPSERVER_SERVER= # 指 jumpserver 访问地址 $ echo "export JUMPSERVER_SERVER= >> ~/.bashrc # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN $ export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN $ echo "export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc $ export JUMPSERVER_KEY_DIR=/config/guacamole/keys $ echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc $ export GUACAMOLE_HOME=/config/guacamole $ echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc 5.5 启动 Guacamole $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh 22 Chapter 2. 安装文档

29 2.3.8 六. 配置 Nginx 整合各组件 6.1 安装 Nginx $ yum install yum-utils $ vi /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl= gpgcheck=1 enabled=1 gpgkey= $ yum makecache fast $ yum install -y nginx $ rm -rf /etc/nginx/conf.d/default.conf $ systemctl enable nginx 6.3 准备配置文件修改 /etc/nginx/conf.d/jumpserver.conf $ vi /etc/nginx/conf.d/jumpserver.conf server { listen 80; # 代理端口, 以后将通过此端口进行访问, 不再通过 8080 端口 # server_name demo.jumpserver.org; # 修改成你的域名或者注释掉 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 /socket.io/ { proxy_pass # 如果 coco 安装在别的服务器, 请填写它的 ip 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 /coco/ { proxy_pass # 如果 coco 安装在别的服务器, 请填写它 的 ip ( 下页继续 ) 2.3. 一步一步安装 (CentOS) 23

30 } 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 # 如果 guacamole 安装在别的服务器, 请填写它的 ip 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 / { proxy_pass # 如果 jumpserver 安装在别的服务器, 请填写它的 ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 6.3 运行 Nginx nginx -t # 确保配置没有问题, 有问题请先解决 # CentOS 7 $ systemctl start nginx $ systemctl enable nginx 6.4 开始使用 Jumpserver 检查应用是否已经正常运行 服务全部启动后, 访问 访问 nginx 代理的端口, 不要再通过 8080 端口访问 默认账号 : admin 密码 : admin 到 Jumpserver 会话管理 - 终端管理检查 Coco Guacamole 等应用的注册 测试连接 如果登录客户端是 macos 或 Linux, 登录语法如下 $ ssh -p2222 admin@ $ sftp -P2222 admin@ 密码 : admin 如果登录客户端是 Windows, Xshell Terminal 登录语法如下 $ ssh admin@ $ sftp admin@ 密码 : admin 如果能登陆代表部署成功 ( 下页继续 ) 24 Chapter 2. 安装文档

31 # sftp 默认上传的位置在资产的 /tmp 目录下 # windows 拖拽上传的位置在资产的 Guacamole RDP 上的 G 目录下 ( 续上页 ) 后续的使用请参考快速入门如遇到问题可参考 FAQ 2.4 一步一步安装 (Ubuntu) 本文档旨在帮助用户了解各组件之间的关系, 生产环境部署建议参考进阶安装文档 云服务器快速部署参考极速安装 安装过程中遇到问题可参考安装过程中常见的问题 环境 系统 : Ubuntu IP: 数据库 :mysql 版本大于等于 5.6 mariadb 版本大于等于 测试推荐硬件 CPU: 64 位双核处理器 内存 : 4G DDR 一. 准备 Python3 和 Python 虚拟环境 1.1 安装依赖包 $ apt-get update && apt-get -y upgrade $ apt-get -y install wget gcc libffi-dev git libmysqlclient-dev # 修改字符集, 否则可能报 input/output error 的问题, 因为日志里打印了中文 $ apt-get -y install language-pack-zh-hans $ export LC_ALL=zh_CN.UTF-8 $ echo 'LANG="zh_CN.UTF-8"' > /etc/default/locale 1.2 安装 Python3.6 $ add-apt-repository ppa:jonathonf/python-3.6 -y $ apt-get update $ apt-get -y install python3.6 python3.6-dev python3.6-venv 1.3 建立 Python 虚拟环境 为了不扰乱原来的环境我们来使用 Python 虚拟环境 2.4. 一步一步安装 (Ubuntu) 25

32 $ cd /opt $ python3.6 -m venv py3 $ source /opt/py3/bin/activate # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行 (py3) [root@localhost py3] 二. 安装 Jumpserver 2.1 下载或 Clone 项目 项目提交较多 git clone 时较大, 你可以选择去 Github 项目页面直接下载 zip 包 $ cd /opt/ $ git clone --depth= 安装依赖包 $ cd /opt/jumpserver/requirements $ apt-get -y install $(cat deb_requirements.txt) # 如果没有任何报错请继续 2.3 安装 Python 库依赖 $ pip install --upgrade pip setuptools $ pip install -r requirements.txt # 如果下载速度很慢, 可以换国内源 $ pip install --upgrade pip setuptools -i $ pip install -r requirements.txt -i 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke $ apt-get -y install redis-server 2.5 安装 MySQL 本教程使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置 $ apt-get -y install mysql-server # 安装过程中注意输入数据库 root 账户的密码 2.6 创建数据库 Jumpserver 并授权 $ DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24` # 生成随机数据库密码 $ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" $ mysql -uroot -p -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD'; flush privileges;" 2.7 修改 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 ( 下页继续 ) 26 Chapter 2. 安装文档

33 $ 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" $ vim config.yml # 确认内容有没有错误 # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥生产环境中请修改为随机字符串, 请勿外泄 SECRET_KEY: # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不再使用原来的注册接受机制 BOOTSTRAP_TOKEN: # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 ( 下页继续 ) 2.4. 一步一步安装 (Ubuntu) 27

34 DB_USER: jumpserver DB_PASSWORD: DB_NAME: jumpserver ( 续上页 ) # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver 2.8 运行 Jumpserver $ cd /opt/jumpserver $./jms start all -d # 后台运行使用 -d 参数./jms start all -d # 新版本更新了运行脚本, 使用方式./jms start stop status all 后台运行请添加 -d 参数 运行不报错, 请继续往下操作 三. 安装 SSH Server 和 WebSocket Server: Coco 3.1 下载或 Clone 项目 $ cd /opt $ source /opt/py3/bin/activate $ git clone --depth=1 && cd coco && git checkout master 3.2 安装依赖 $ cd /opt/coco/requirements $ pip install -r requirements.txt ( 下页继续 ) 28 Chapter 2. 安装文档

35 # 如果下载速度很慢, 可以换国内源 $ pip install -r requirements.txt -i ( 续上页 ) 3.3 查看配置文件并运行 $ cd /opt/coco $ cp config_example.yml config.yml $ vim config.yml # 项目名称, 会用来向 Jumpserver 注册, 识别而已, 不能重复 # NAME: {{ Hostname }} # Jumpserver 项目的 url, api 请求注册会使用 CORE_HOST: # Bootstrap Token, 预共享秘钥, 用来注册 coco 使用的 service account 和 terminal # 请和 jumpserver 配置文件中保持一致, 注册完成后可以删除 BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver> # 启动时绑定的 ip, 默认 # BIND_HOST: # 监听的 SSH 端口号, 默认 2222 # SSHD_PORT: 2222 # 监听的 HTTP/WS 端口号, 默认 5000 # HTTPD_PORT: 5000 # 项目使用的 ACCESS KEY, 默认会注册, 并保存到 ACCESS_KEY_STORE 中, # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret # ACCESS_KEY: null # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中 # ACCESS_KEY_STORE: data/keys/.access_key # 加密密钥 # SECRET_KEY: null # 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL] # LOG_LEVEL: INFO LOG_LEVEL: ERROR # 日志存放的目录 # LOG_DIR: logs # SSH 白名单 # ALLOW_SSH_USER: all # SSH 黑名单, 如果用户同时在白名单和黑名单, 黑名单优先生效 # BLOCK_SSH_USER: # - # 和 Jumpserver 保持心跳时间间隔 # HEARTBEAT_INTERVAL: 5 # Admin 的名字, 出问题会提示给用户 ( 下页继续 ) 2.4. 一步一步安装 (Ubuntu) 29

36 # ADMINS: '' ( 续上页 ) # SSH 连接超时时间 (default 15 seconds) # SSH_TIMEOUT: 15 # 语言 [en, zh] # LANGUAGE_CODE: zh # SFTP 的根目录, 可选 /tmp, Home 其他自定义目录 # SFTP_ROOT: /tmp # SFTP 是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false $./cocod start -d # 后台运行使用 -d 参数./cocod start -d # 新版本更新了运行脚本, 使用方式./cocod start stop status 后台运行请添加 -d 参数 四. 安装 Web Terminal 前端 : Luna Luna 已改为纯前端, 需要 Nginx 来运行访问 访问 ( 下载对应版本的 release 包, 直接解压不需要编译 4.1 解压 Luna $ cd /opt/ $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna 五. 安装 Windows 支持组件 ( 如果不需要管理 windows 资产, 可以直接跳过这一步 ) 5.1 安装依赖 $ apt-get -y install libtool autoconf $ apt-get -y install libcairo2-dev libjpeg-turbo8-dev libpng12-dev libossp-uuid-dev $ apt-get -y install libavcodec-dev libavutil-dev libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl- dev libvorbis-dev libwebp-dev ghostscript $ apt-get -y install default-jre default-jdk 5.2 编译安装 guacamole 服务 $ cd /opt $ git clone --depth=1 $ cd docker-guacamole $ tar xf guacamole-server tar.gz ( 下页继续 ) 30 Chapter 2. 安装文档

37 $ cd guacamole-server $ autoreconf -fi $./configure --with-init-dir=/etc/init.d $ make && make install $ ln -s /usr/local/lib/freerdp/*.so /usr/lib/x86_64-linux-gnu/freerdp/ $ cd.. $ rm -rf guacamole-server $ ldconfig ( 续上页 ) $ mkdir -p /config/guacamole /config/guacamole/lib /config/guacamole/extensions # 创建 guacamole 目录 $ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver jar /config/guacamole/ extensions/guacamole-auth-jumpserver jar $ ln -sf /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/ guacamole/guacamole.properties # guacamole 配置文件 $ cd /config $ wget gz # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf linux-amd64.tar.gz -C /bin/ $ chmod +x /bin/ssh-forward 5.3 配置 Tomcat $ cd /config $ wget tomcat tar.gz $ tar xf apache-tomcat tar.gz $ rm -rf apache-tomcat tar.gz $ mv apache-tomcat tomcat8 $ rm -rf /config/tomcat8/webapps/* $ ln -sf /opt/docker-guacamole/guacamole war /config/tomcat8/webapps/root.war # guacamole client $ sed -i 's/connector port="8080"/connector port="8081"/g' /config/tomcat8/conf/ server.xml # 修改默认端口为 8081 $ sed -i 's/fine/warning/g' /config/tomcat8/conf/logging.properties # 修改 log 等级为 WARNING 5.4 配置环境变量 # 勿多次执行以下环境设置 $ export JUMPSERVER_SERVER= # 指 jumpserver 访问地址 $ echo "export JUMPSERVER_SERVER= >> ~/.bashrc # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN $ export BOOTSTRAP_TOKEN=****** $ echo "export BOOTSTRAP_TOKEN=******" >> ~/.bashrc $ export JUMPSERVER_KEY_DIR=/config/guacamole/keys $ echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc $ export GUACAMOLE_HOME=/config/guacamole $ echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc 2.4. 一步一步安装 (Ubuntu) 31

38 5.5 启动 Guacamole $ /etc/init.d/guacd restart $ sh /config/tomcat8/bin/startup.sh 这里所需要注意的是 guacamole 暴露出来的端口是 8081, 若与主机上其他端口冲突请自定义一下 六. 配置 Nginx 整合各组件 6.1 安装 Nginx $ apt-get -y install nginx $ rm -rf /etc/nginx/sites-enabled/default 6.2 准备配置文件修改 /etc/nginx/sites-enabled/jumpserver.conf $ vim /etc/nginx/sites-enabled/jumpserver.conf server { listen 80; server_name _; 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 /socket.io/ { proxy_pass # 如果 coco 安装在别的服务器, 请填写它的 ip 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 /coco/ { proxy_pass proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ( 下页继续 ) 32 Chapter 2. 安装文档

39 } access_log off; ( 续上页 ) location /guacamole/ { proxy_pass # 如果 guacamole 安装在别的服务器, 请填写它的 ip proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; access_log off; 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 / { proxy_pass proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 6.3 重启 Nginx $ nginx -t # 如果没有报错请继续 $ nginx -s reload 6.4 开始使用 Jumpserver 服务全部启动后, 访问 默认账号 : admin 密码 : admin 到 Jumpserver 会话管理 - 终端管理检查 Coco Guacamole 等应用的注册 测试连接 如果登录客户端是 macos 或 Linux, 登录语法如下 $ ssh -p2222 admin@ $ sftp -P2222 admin@ 密码 : admin 如果登录客户端是 Windows, Xshell Terminal 登录语法如下 $ ssh admin@ $ sftp admin@ 密码 : admin 如果能登陆代表部署成功 # sftp 默认上传的位置在资产的 /tmp 目录下 # windows 拖拽上传的位置在资产的 Guacamole RDP 上的 G 目录下 后续的使用请参考快速入门如遇到问题可参考 FAQ 2.4. 一步一步安装 (Ubuntu) 33

40 2.5 一站式 分布式安装文档 组件说明 Jumpserver 为管理后台, 管理员可以通过 Web 页面进行资产管理 用户管理 资产授权等操作 Coco 为 SSH Server 和 Web Terminal Server 用户可以通过使用自己的账户登录 SSH 或者 Web Terminal 直接访问被授权的资产 不需要知道服务器的账户密码 Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件 Guacamole 为 Windows 组件, 用户可以通过 Web Terminal 来连接 Windows 资产 ( 暂时只能通过 Web Terminal 来访问 ) 端口说明 Jumpserver 默认端口为 8080/tcp 配置文件在 jumpserver/config.yml Coco 默认 SSH 端口为 2222/tcp, 默认 Web Terminal 端口为 5000/tcp 配置文件在 coco/config.yml Guacamole 默认端口为 8081/tcp Nginx 默认端口为 80/tcp Redis 默认端口为 6379/tcp Mysql 默认端口为 3306/tcp Protocol Server name Port TCP Jumpserver 8080 TCP Coco 2222, 5000 TCP Guacamole 8081 TCP Db 3306 TCP Redis 6379 TCP Nginx 一体化部署文档 ( 基于 CentOS 7) CentOS 7 安装文档 说明 # 开头的行表示注释 > 开头的行表示需要在 mysql 中执行 $ 开头的行表示需要执行的命令云服务器快速部署参考极速安装安装过程中遇到问题可参考安装过程中常见的问题 34 Chapter 2. 安装文档

41 环境 系统 : CentOS 7 IP: 目录 : /opt 数据库 : mariadb 代理 : nginx 开始安装 $ yum update -y # 防火墙与 selinux 设置说明, 如果已经关闭了防火墙和 Selinux 的用户请跳过设置 $ systemctl start firewalld $ firewall-cmd --zone=public --add-port=80/tcp --permanent # nginx 端口 $ firewall-cmd --zone=public --add-port=2222/tcp --permanent # 用户 SSH 登录端口 coco --permanent 永久生效, 没有此参数重启后失效 $ firewall-cmd --reload # 重新载入规则 $ setenforce 0 $ sed -i "s/selinux=enforcing/selinux=disabled/g" /etc/selinux/config # 修改字符集, 否则可能报 input/output error 的问题, 因为日志里打印了中文 $ localedef -c -f UTF-8 -i zh_cn zh_cn.utf-8 $ export LC_ALL=zh_CN.UTF-8 $ echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf # 安装依赖包 $ yum -y install wget gcc epel-release git # 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke $ yum -y install redis $ systemctl enable redis $ systemctl start redis # 安装 MySQL, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置, 支持 sqlite3, mysql, postgres 等 $ yum -y install mariadb mariadb-devel mariadb-server # centos7 下叫 mariadb, 用法与 mysql 一致 $ systemctl enable mariadb $ systemctl start mariadb # 创建数据库 Jumpserver 并授权 $ DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24` # 生成随机数据库密码 $ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" $ mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD'; flush privileges;" # 安装 Nginx, 用作代理服务器整合 Jumpserver 与各个组件 $ vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo ( 下页继续 ) 2.5. 一站式 分布式安装文档 35

42 baseurl= gpgcheck=0 enabled=1 ( 续上页 ) $ yum -y install nginx $ systemctl enable nginx # 安装 Python3.6 $ yum -y install python36 python36-devel # 配置并载入 Python3 虚拟环境 $ cd /opt $ python3.6 -m venv py3 # py3 为虚拟环境名称, 可自定义 $ source /opt/py3/bin/activate # 退出虚拟环境可以使用 deactivate 命令 # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 载入环境后默认以下所有命令均在该虚拟环境中运行 (py3) [root@localhost py3] # 下载 Jumpserver $ cd /opt/ $ git clone --depth=1 # 安装依赖 RPM 包 $ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) # 安装 Python 库依赖 $ pip install --upgrade pip setuptools $ pip install -r /opt/jumpserver/requirements/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 $ Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1` $ echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" $ echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" $ echo -e "\033[31m 你的服务器 IP 是 $Server_IP \033[0m" $ vi config.yml # 确认内容有没有错误 36 Chapter 2. 安装文档

43 # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥生产环境中请修改为随机字符串, 请勿外泄 SECRET_KEY: # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制 BOOTSTRAP_TOKEN: # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: DB_NAME: jumpserver # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization ( 下页继续 ) 2.5. 一站式 分布式安装文档 37

44 # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret ( 续上页 ) # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver # 运行 Jumpserver $ cd /opt/jumpserver $./jms start all -d # 后台运行使用 -d 参数./jms start all -d # 新版本更新了运行脚本, 使用方式./jms start stop status all 后台运行请添加 -d 参数 # 安装 docker 部署 coco 与 guacamole $ yum install -y yum-utils device-mapper-persistent-data lvm2 $ yum-config-manager --add-repo docker-ce.repo $ yum makecache fast $ rpm --import $ yum -y install docker-ce $ systemctl enable docker $ curl -ssl sh -s daocloud.io $ systemctl restart docker # 允许容器 ip 访问宿主 8080 端口, ( 容器的 ip 可以进入容器查看 ) $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /16" port protocol="tcp" port="8080" accept" $ firewall-cmd --reload # x 是 docker 容器默认的 IP 池, 这里偷懒直接授权 ip 段了, 可以根据实际情况单独授权 IP # 指向 jumpserver 的服务端口, 如 # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: # 安装 Web Terminal 前端 : Luna 需要 Nginx 来运行访问访问 ( luna/releases) 下载对应版本的 release 包, 直接解压, 不需要编译 $ cd /opt $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 配置 Nginx 整合各组件 ( 下页继续 ) 38 Chapter 2. 安装文档

45 $ rm -rf /etc/nginx/conf.d/default.conf ( 续上页 ) $ vi /etc/nginx/conf.d/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 /socket.io/ { proxy_pass 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 /coco/ { proxy_pass 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 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 / { ( 下页继续 ) 2.5. 一站式 分布式安装文档 39

46 } } proxy_pass proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ( 续上页 ) # 运行 Nginx $ nginx -t # 确保配置没有问题, 有问题请先解决 $ systemctl start nginx # 访问 ( 注意没有 :8080 通过 nginx 代理端口进行访问 ) # 默认账号 : admin 密码 : admin 到会话管理 - 终端管理接受 Coco Guacamole 等应用的注册 # 测试连接 $ ssh -p2222 admin@ $ sftp -P2222 admin@ 密码 : admin # 如果是用在 Windows 下, Xshell Terminal 登录语法如下 $ ssh admin@ $ sftp admin@ 密码 : admin 如果能登陆代表部署成功 # sftp 默认上传的位置在资产的 /tmp 目录下 # windows 拖拽上传的位置在资产的 Guacamole RDP 上的 G 目录下 多组件负载说明 # coco 服务默认运行在单核心下面, 当负载过高时会导致用户访问变慢, 这时可运行多个 docker 容器缓解 $ docker run --name jms_coco01 -d -p 2223:2222 -p 5001:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=****** jumpserver/jms_coco: $ docker run --name jms_coco02 -d -p 2224:2222 -p 5002:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=****** jumpserver/jms_coco: # guacamole 也是一样 $ docker run --name jms_guacamole01 -d -p 8082:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=****** jumpserver/jms_guacamole: $ docker run --name jms_guacamole02 -d -p 8083:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=****** jumpserver/jms_guacamole: # nginx 代理设置 $ vi /etc/nginx/nginx.conf user nginx; worker_processes auto; error_log pid /var/log/nginx/error.log warn; /var/run/nginx.pid; events { worker_connections 1024; } ( 下页继续 ) 40 Chapter 2. 安装文档

47 # 加入 tcp 代理 stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_ connect_time"'; ( 续上页 ) access_log /var/log/nginx/tcp-access.log open_log_file_cache off; proxy; upstream cocossh { server localhost:2222 weight=1; server localhost:2223 weight=1; server localhost:2224 weight=1; # 这里是 coco ssh 的后端 ip hash $remote_addr; } server { } } # 到此结束 listen 2220; proxy_pass cocossh; proxy_connect_timeout 10s; # 多节点 # 多节点 # 不能使用已经使用的端口, 自行修改, 用户 ssh 登录时的端口 http { include default_type /etc/nginx/mime.types; application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; # tcp_nopush on; keepalive_timeout 65; # 关闭版本显示 server_tokens off; } include /etc/nginx/conf.d/*.conf; $ firewall-cmd --zone=public --add-port=2220/tcp --permanent $ firewall-cmd --reload $ vi /etc/nginx/conf.d/jumpserver.conf upstream jumpserver { server localhost:80; # 这里是 jumpserver 的后端 ip } ( 下页继续 ) 2.5. 一站式 分布式安装文档 41

48 upstream cocows { server localhost:5000 weight=1; server localhost:5001 weight=1; server localhost:5002 weight=1; # 这里是 coco ws 的后端 ip ip_hash; } upstream guacamole { server localhost:8081 weight=1; server localhost:8082 weight=1; server localhost:8083 weight=1; # 这里是 guacamole 的后端 ip ip_hash; } server { listen 80; server_name demo.jumpserver.org; # 多节点 # 多节点 # 多节点 # 多节点 # 自行修改成你的域名 ( 续上页 ) client_max_body_size 100m; # 录像上传大小限制 location / { proxy_pass 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 /luna/ { try_files $uri / /index.html; alias /opt/luna/; } location /socket.io/ { proxy_pass # coco 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 /coco/ { proxy_pass 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/ { ( 下页继续 ) 42 Chapter 2. 安装文档

49 } } proxy_pass # guacamole 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; ( 续上页 ) $ nginx -t $ nginx -s reload 后续的使用请参考快速入门如遇到问题可参考 FAQ 一体化部署文档 ( 基于 Ubuntu 18.04) Ubuntu 安装文档 说明 # 开头的行表示注释 > 开头的行表示需要在 mysql 中执行 $ 开头的行表示需要执行的命令安装过程中遇到问题可参考安装过程中常见的问题 环境 系统 : Ubuntu IP: 目录 : /opt 数据库 : mariadb 代理 : nginx 开始安装 一. 准备 Python3 和 Python 虚拟环境 1.1 安装依赖包 $ apt-get update && apt-get -y upgrade $ apt-get -y install wget gcc libffi-dev git # 修改字符集, 否则可能报 input/output error 的问题, 因为日志里打印了中文 ( 下页继续 ) 2.5. 一站式 分布式安装文档 43

50 $ apt-get -y install language-pack-zh-hans $ export LC_ALL="zh_CN.utf8" $ echo 'LANG="zh_CN.utf8"' > /etc/default/locale ( 续上页 ) 1.2 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke $ apt-get -y install redis-server 1.3 安装 MySQL 本教程使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置 $ apt-get -y install mysql-server libmysqlclient-dev 1.4 创建数据库 Jumpserver 并授权 $ DB_PASSWORD=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 24` # 生成随机数据库密码 $ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m" $ mysql -uroot -p -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@' ' identified by '$DB_PASSWORD'; flush privileges;" 1.5 安装 Python3.6 $ apt-get -y install python3.6-dev python3.6-venv 1.6 建立 Python 虚拟环境 为了不扰乱原来的环境我们来使用 Python 虚拟环境 $ cd /opt $ python3.6 -m venv py3 $ source /opt/py3/bin/activate # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行 (py3) [root@localhost py3] 二. 安装 Jumpserver 2.1 下载或 Clone 项目 $ cd /opt/ $ git clone --depth= 安装依赖包 $ cd /opt/jumpserver/requirements $ apt-get -y install $(cat deb_requirements.txt) 2.3 安装 Python 库依赖 $ pip install --upgrade pip setuptools $ pip install -r requirements.txt 2.4 修改 Jumpserver 配置文件 44 Chapter 2. 安装文档

51 $ 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 $ Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1` $ echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" $ echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" $ echo -e "\033[31m 你的服务器 IP 是 $Server_IP \033[0m" $ vim config.yml # 确认内容有没有错误 # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥生产环境中请修改为随机字符串, 请勿外泄 SECRET_KEY: # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制 BOOTSTRAP_TOKEN: # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 ( 下页继续 ) 2.5. 一站式 分布式安装文档 45

52 # DB_NAME: ( 续上页 ) # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: DB_NAME: jumpserver # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver 2.5 运行 Jumpserver $ cd /opt/jumpserver $./jms start all -d # 后台运行使用 -d 参数./jms start all -d # 新版本更新了运行脚本, 使用方式./jms start stop status all 后台运行请添加 -d 参数 运行不报错, 请继续往下操作 三. 安装 SSH Server 和 WebSocket Server: Coco 3.1 安装 Docker $ apt-get -y install apt-transport-https ca-certificates curl software-properties- common $ curl -fssl sudo apt-key add - ( 下页继续 ) 46 Chapter 2. 安装文档

53 $ add-apt-repository "deb [arch=amd64] ubuntu $(lsb_release -cs) stable" $ apt-get -y update $ apt-get -y install docker-ce $ curl -ssl sh -s daocloud.io $ systemctl restart docker.service 3.2 部署 Coco ( 续上页 ) $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN 四. 安装 RDP Server 和 VNC Server: Guacamole 4.1 部署 Guacamole $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN 五. 安装 Web Terminal 前端 : Luna 访问 ( 下载对应版本的 release 包, 直接解压, 不需要编译 5.1 部署 Luna $ cd /opt/ $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna 六. 配置 Nginx 整合各组件 6.1 安装 Nginx $ apt-get -y install curl gnupg2 ca-certificates lsb-release $ add-apt-repository "deb $(lsb_release -cs) nginx" $ curl -fssl sudo apt-key add - $ apt-get update $ apt-get -y install nginx 6.2 准备配置文件 /etc/nginx/conf.d/jumpserver.conf 2.5. 一站式 分布式安装文档 47

54 $ rm -rf /etc/nginx/conf.d/default.conf $ vim /etc/nginx/conf.d/jumpserver.conf server { listen 80; server_name _; client_max_body_size 100m; # 录像及文件上传大小限制 location /luna/ { try_files $uri / /index.html; alias /opt/luna/; } location /media/ { add_header Content-Encoding gzip; root /opt/jumpserver/data/; } location /static/ { root /opt/jumpserver/data/; } location /socket.io/ { proxy_pass 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 /coco/ { proxy_pass 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 proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; access_log off; 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 / { proxy_pass ( 下页继续 ) 48 Chapter 2. 安装文档

55 } proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ( 续上页 ) } 6.3 重启 Nginx $ nginx -t # 如果没有报错请继续 $ systemctl restart nginx 6.4 开始使用 Jumpserver 服务全部启动后, 访问 默认账号 : admin 密码 : admin 到 Jumpserver 会话管理 - 终端管理检查 Coco Guacamole 等应用的注册 测试连接 如果登录客户端是 macos 或 Linux, 登录语法如下 $ ssh -p2222 admin@ $ sftp -P2222 admin@ 密码 : admin 如果登录客户端是 Windows, Xshell Terminal 登录语法如下 $ ssh admin@ $ sftp admin@ 密码 : admin 如果能登陆代表部署成功 # sftp 默认上传的位置在资产的 /tmp 目录下 # windows 拖拽上传的位置在资产的 Guacamole RDP 上的 G 目录下 后续的使用请参考快速入门如遇到问题可参考 FAQ 分布式部署文档 ( 基于 CentOS 7) 等待更新 ing... 分布式部署文档 - 环境说明 环境 系统 : CentOS 7 数据库 IP: Redis ip: Jumpserver IP: Coco IP: Guacamole IP: 一站式 分布式安装文档 49

56 Nginx 代理 IP: Protocol Server name Port Used By TCP Jumpserver 80, 8080 Nginx, Coco, Guacamole TCP Coco 2222, 5000 Nginx TCP Guacamole 8081 Nginx TCP Db 3306 Jumpserver TCP Redis 6379 Jumpserver TCP Nginx 80, 2222 All Nginx 多组件注意 upstream 的负载模式, 需要解决 session 问题 安全 ssh telnet 协议资产的防火墙设置允许 coco 与 jumpserver 访问 rdp 协议资产的防火墙设置允许 guacamole 与 jumpserver 访问 其他 最终用户都是通过 Nginx 反向代理访问 如需要做 HA 或负载, 按照如上方式部署多个应用, 数据库做主从, 然后在 nginx 代理服务器用负载即可 ( 四层 ) 注意 : 录像需要自己手动同步或者存放在公共目录 分布式部署文档 - nginx 代理部署 说明 # 开头的行表示注释 $ 开头的行表示需要执行的命令 环境 系统 : CentOS 7 IP: Protocol ServerName IP Port Used By TCP Nginx , 443, 2222 All TCP Nginx Jumpserver 开始安装 # 升级系统 $ yum upgrade -y # 获取 epel-release 源 $ yum -y install epel-release ( 下页继续 ) 50 Chapter 2. 安装文档

57 ( 续上页 ) # 设置防火墙, 开放 端口 $ firewall-cmd --zone=public --add-port=80/tcp --permanent $ firewall-cmd --zone=public --add-port=443/tcp --permanent $ firewall-cmd --zone=public --add-port=2222/tcp --permanent $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /24" port protocol="tcp" port="3306" accept" # /24 为整个 Jumpserver 网络网段, 这里就偷懒了, 自己根据实际情况修改即可 $ firewall-cmd --reload # 设置 selinux $ setenforce 0 $ sed -i "s/selinux=enforcing/selinux=disabled/g" /etc/selinux/config # 安装 nginx $ vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl= gpgcheck=0 enabled=1 # 非 Centos7 请参考 $ yum -y install nginx $ systemctl enable nginx # 下载 luna $ cd /opt $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 配置 Nginx $ vi /etc/nginx/nginx.conf user nginx; worker_processes auto; error_log pid /var/log/nginx/error.log warn; /var/run/nginx.pid; events { worker_connections 1024; } stream { log_format proxy '$remote_addr [$time_local] ' ( 下页继续 ) 2.5. 一站式 分布式安装文档 51

58 connect_time"'; ( 续上页 ) '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_ access_log /var/log/nginx/tcp-access.log open_log_file_cache off; proxy; upstream MariaDB { server :3306; server :3306 backup; # 多节点 server :3306 down; # 多节点 # 这里是 Mariadb 的后端 ip } upstream cocossh { server :2222; server :2223; # 这里是 coco ssh 的后端 ip least_conn; } # 多节点 } server { listen 3306; proxy_pass MariaDB; proxy_connect_timeout 1s; } server { listen 2222; proxy_pass cocossh; proxy_connect_timeout 1s; } # detect failure quickly # detect failure quickly http { include default_type /etc/nginx/mime.types; application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; # tcp_nopush on; keepalive_timeout 65; # 关闭版本显示 server_tokens off; } include /etc/nginx/conf.d/*.conf; 52 Chapter 2. 安装文档

59 # 备份默认的配置文件 $ mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.bak $ vi /etc/nginx/conf.d/jumpserver.conf upstream jumpserver { server :80; # 这里是 jumpserver 的后端 ip } upstream cocows { server :5000 weight=1; server :5001 weight=1; # 这里是 coco ws 的后端 ip ip_hash; } upstream guacamole { server :8081 weight=1; server :8082 weight=1; # 这里是 guacamole 的后端 ip ip_hash; } # 多节点 # 多节点 server { listen 80; server_name # 自行修改成你的域名 return } server { # 推荐使用 https 访问, 如果不使用 https 请自行注释下面的选项 listen 443; server_name # 自行修改成你的域名 ssl on; ssl_certificate /etc/nginx/sslkey/1_jumpserver.org_bundle.crt; # 自行设置证书 ssl_certificate_key /etc/nginx/sslkey/2_jumpserver.org.key; # 自行设置证书 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:! ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; client_max_body_size 100m; # 录像上传大小限制 location / { proxy_pass # jumpserver 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 /luna/ { try_files $uri / /index.html; alias /opt/luna/; # luna 路径, 如果修改安装目录, 此处需要修改 } ( 下页继续 ) 2.5. 一站式 分布式安装文档 53

60 ( 续上页 ) location /socket.io/ { proxy_pass # coco 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 /coco/ { proxy_pass 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 # guacamole 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; } # nginx 测试并启动, 如果报错请按报错提示自行解决 $ nginx -t $ systemctl start nginx # 访问 # 默认账号 : admin 密码 : admin 到会话管理 - 终端管理接受 Coco Guacamole 等应用的注册 # 测试连接 $ ssh -p2222 admin@ $ sftp -P2222 admin@ 密码 : admin # 如果是用在 Windows 下, Xshell Terminal 登录语法如下 $ ssh admin@ $ sftp admin@ 密码 : admin 如果能登陆代表部署成功 # sftp 默认上传的位置在资产的 /tmp 目录下 # windows 拖拽上传的位置在资产的 Guacamole RDP 上的 G 目录下 后续的使用请参考快速入门如遇到问题可参考 FAQ 54 Chapter 2. 安装文档

61 分布式部署文档 - 数据库部署 说明 # 开头的行表示注释 $ 开头的行表示需要执行的命令 > 开头的行表示需要在数据库中执行 环境 系统 : CentOS 7 服务 : MariaDB Galera Cluster Protocol ServerName IP Port Used By TCP Mariadb Jumpserver TCP Mariadb Jumpserver TCP Mariadb Jumpserver 开始安装 # 以下命令需要在三台数据库服务器分别执行 $ yum upgrade -y # 添加 MariaDB 源 $ vi /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = gpgkey= gpgcheck=1 # 安装 MariaDB Galera Cluster $ yum install -y mariadb mariadb-server mariadb-common galera rsync # 设置 Firewalld 和 Selinux $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /24" port protocol="tcp" port="3306" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /24" port protocol="tcp" port="4567" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /24" port protocol="tcp" port="4568" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /24" port protocol="tcp" port="4444" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" /24" port protocol="udp" port="4567" accept" # /24 为整个 Jumpserver 网络网段, 这里就偷懒了, 自己根据实际情况修改即可 $ firewall-cmd --reload $ setenforce 0 $ sed -i "s/selinux=enforcing/selinux=disabled/g" /etc/selinux/config 2.5. 一站式 分布式安装文档 55

62 # 在 上执行初始化命令 $ systemctl start mariadb $ mysql_secure_installation # 推荐设置 root 密码, 其他选项可以全部 y $ systemctl stop mariadb # 在 上执行以下命令 $ vi /etc/my.cnf.d/server.cnf... [galera] wsrep_on=on wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name=galera_cluster wsrep_cluster_address="gcomm:// , , " wsrep_node_name=mariadb-01 # 注意这里改成本机 hostname wsrep_node_address= # 注意这里改成本机 ip binlog_format=row default_storage_engine=innodb innodb_autoinc_lock_mode=2... # 在 上执行以下命令 $ vi /etc/my.cnf.d/server.cnf... [galera] wsrep_on=on wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name=galera_cluster wsrep_cluster_address="gcomm:// , , " wsrep_node_name=mariadb-02 # 注意这里改成本机 hostname wsrep_node_address= # 注意这里改成本机 ip binlog_format=row default_storage_engine=innodb innodb_autoinc_lock_mode=2... # 在 上执行以下命令 $ vi /etc/my.cnf.d/server.cnf... [galera] wsrep_on=on wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name=galera_cluster wsrep_cluster_address="gcomm:// , , " wsrep_node_name=mariadb-03 # 注意这里改成本机 hostname wsrep_node_address= # 注意这里改成本机 ip binlog_format=row default_storage_engine=innodb innodb_autoinc_lock_mode=2 # 在 上执行以下命令 $ sudo -u mysql /usr/sbin/mysqld --wsrep-new-cluster &> /tmp/wsrep_new_cluster.log & $ disown $! $ tail -f /tmp/wsrep_new_cluster.log # 如果出现 ready for connections, 表示启动成功 # 在 和 启动 mariadb 服务 $ systemctl start mariadb 56 Chapter 2. 安装文档

63 # 回到第一台服务器 $ ps -ef grep mysqld grep -v grep awk '{print $2}' xargs kill -9 $ systemctl start mariadb # 在任意数据库服务器执行以下命令验证 MariaDB Galera Cluster $ mysql -uroot -p -e "show status like 'wsrep_cluster_size'" # 这里应该显示集群里有 3 个节点 $ mysql -uroot -p -e "show status like 'wsrep_connected'" # 这里应该显示 ON $ mysql -uroot -p -e "show status like 'wsrep_incoming_addresses'" # 这里应该显示 3 个 ip $ mysql -uroot -p -e "show status like 'wsrep_local_state_comment'" # 这里显示节点的同步 状态 # 创建 Jumpserver 数据库及授权 $ mysql -uroot > create database jumpserver default charset 'utf8'; > grant all on jumpserver.* to 'jumpserver'@' %' identified by 'weakpassword'; > flush privileges; > quit 之后去 nginx 设置 tcp 代理即可 分布式部署文档 - redis 部署 说明 # 开头的行表示注释 $ 开头的行表示需要执行的命令 环境 系统 : CentOS 7 IP: Protocol ServerName IP Port Used By TCP Redis Jumpserver 开始安装 # 升级系统 $ yum upgrade -y # 安装 redis 服务 $ yum install -y install epel-release $ yum install -y redis # 设置防火墙, 开放 6379 端口给 jumpserver 访问 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="6379" accept" $ firewall-cmd --reload ( 下页继续 ) 2.5. 一站式 分布式安装文档 57

64 ( 续上页 ) # 设置 redis 自启 $ systemctl enable redis # 修改 redis 配置文件 $ vi /etc/redis.conf... # bind # 注释这行, 新增如下内容 bind requirepass weakpassword # redis 连接密码 maxmemory-policy allkeys-lru # 清理策略, 优先移除最近未使用的 key... # 启动 redis $ systemctl start redis # redis 的主从设置请参考其官方, 之后会补上 分布式部署文档 - jumpserver 部署 说明 # 开头的行表示注释 $ 开头的行表示需要执行的命令 环境 系统 : CentOS 7 IP: Protocol ServerName IP Port Used By TCP Jumpserver , 8080 Nginx, Coco, Guacamole 开始安装 # 升级系统 $ yum upgrade -y # 安装依赖包 $ yum -y install gcc epel-release git # 设置防火墙, 开放 80 端口给 nginx 访问, 开放 8080 端口给 coco 和 guacamole 访问 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="80" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="8080" accept" ( 下页继续 ) 58 Chapter 2. 安装文档

65 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="8080" accept" $ firewall-cmd --reload # 安装 nginx $ yum -y install nginx $ systemctl enable nginx # 安装 Python3.6 $ yum -y install python36 python36-devel # 配置 py3 虚拟环境 $ python3.6 -m venv /opt/py3 $ source /opt/py3/bin/activate # 下载 Jumpserver $ git clone --depth=1 # 安装依赖 RPM 包 $ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) # 安装 Python 库依赖 $ pip install --upgrade pip setuptools $ pip install -r /opt/jumpserver/requirements/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 $ echo -e "\033[31m 你的 SECRET_KEY 是 $SECRET_KEY \033[0m" $ echo -e "\033[31m 你的 BOOTSTRAP_TOKEN 是 $BOOTSTRAP_TOKEN \033[0m" $ vi config.yml ( 续上页 ) # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥生产环境中请修改为随机字符串, 请勿外泄, 升级或者迁移请保持不变 SECRET_KEY: # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制 BOOTSTRAP_TOKEN: ( 下页继续 ) 2.5. 一站式 分布式安装文档 59

66 # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false ( 续上页 ) # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: 你的数据库密码 DB_NAME: jumpserver # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret ( 下页继续 ) 60 Chapter 2. 安装文档

67 ( 续上页 ) # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver # 修改 nginx 配置文件 ( 如果无法正常访问, 请注释掉 nginx.conf 的 server 所有字段 ) $ vi /etc/nginx/conf.d/jumpserver.conf server { listen 80; client_max_body_size 100m; # 录像上传大小限制 location /media/ { add_header Content-Encoding gzip; root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改 } location /static/ { root /opt/jumpserver/data/; } # 静态资源, 如果修改安装目录, 此处需要修改 } location / { proxy_pass proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # nginx 测试并启动, 如果报错请按报错提示自行解决 $ nginx -t $ systemctl start nginx # 运行 Jumpserver $ cd /opt/jumpserver $./jms start all # 后台运行使用 -d 参数./jms start all -d # 新版本更新了运行脚本, 使用方式./jms start stop status all 后台运行请添加 -d 参数 # 访问 默认账号 : admin 密码 : admin # 多节点部署, 请参考此文档, 设置数据库时请选择从库, 其他的一样 分布式部署文档 - coco 部署 说明 # 开头的行表示注释 $ 开头的行表示需要执行的命令 2.5. 一站式 分布式安装文档 61

68 环境 系统 : CentOS 7 IP: Protocol ServerName IP Port Used By TCP Coco , 5000 Nginx TCP Coco , 5001 Nginx 开始安装 # 升级系统 $ yum upgrade -y # 设置防火墙, 开放 端口给 nginx 访问 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="2222" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="5000" accept" $ firewall-cmd --reload # 安装 docker $ yum install -y yum-utils device-mapper-persistent-data lvm2 $ yum-config-manager --add-repo docker-ce.repo $ yum makecache fast $ yum -y install docker-ce $ curl -ssl sh -s daocloud.io $ systemctl enable docker $ systemctl start docker # 通过 docker 部署 $ docker run --name jms_coco -d \ -p 2222:2222 \ -p 5000:5000 \ -e CORE_HOST= \ -e BOOTSTRAP_TOKEN= 你的 token \ jumpserver/jms_coco: # 访问 检查 coco 注册 多节点部署 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="2223" accept" $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="5001" accept" $ firewall-cmd --reload $ docker run --name jms_coco1 -d \ -p 2223:2222 \ ( 下页继续 ) 62 Chapter 2. 安装文档

69 -p 5001:5000 \ -e CORE_HOST= \ -e BOOTSTRAP_TOKEN= 你的 token \ jumpserver/jms_coco: ( 续上页 ) # 访问 检查 coco 注册 分布式部署文档 - guacamole 部署 说明 # 开头的行表示注释 $ 开头的行表示需要执行的命令 环境 系统 : CentOS 7 IP: Protocol ServerName IP Port Used By TCP Guacamole Nginx TCP Guacamole Nginx 开始安装 # 升级系统 $ yum upgrade -y # 设置防火墙, 开放 8081 端口给 nginx 访问 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="8081" accept" $ firewall-cmd --reload # 安装 docker $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 $ yum-config-manager --add-repo docker-ce.repo $ yum makecache fast $ yum -y install docker-ce $ curl -ssl sh -s daocloud.io $ systemctl enable docker $ systemctl start docker # 通过 docker 部署 $ docker run --name jms_guacamole -d \ -p 8081:8081 \ -e JUMPSERVER_KEY_DIR=/config/guacamole/key \ -e JUMPSERVER_SERVER= \ ( 下页继续 ) 2.5. 一站式 分布式安装文档 63

70 -e BOOTSTRAP_TOKEN= 你的 token \ jumpserver/jms_guacamole: ( 续上页 ) # 访问 检查 guacamole 注册 多节点部署 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="8082" accept" $ firewall-cmd --reload $ docker run --name jms_guacamole1 -d \ -p 8082:8081 \ -e JUMPSERVER_KEY_DIR=/config/guacamole/key \ -e JUMPSERVER_SERVER= \ -e BOOTSTRAP_TOKEN= 你的 token \ jumpserver/jms_guacamole: # 访问 检查 guacamole 注册 2.6 安装后优化文档 能解决部分 CPU 和内存高占用问题 配置文件调整 $ cd /opt/jumpserver $ vi config.yml # 调整 debug 模式和 log_level... DEBUG: false... LOG_LEVEL: ERROR... $ cd /opt/coco $ vi config.yml # 调整 log_level... LOG_LEVEL: ERROR... # 设置好后重启 jumpserver 和 coco 64 Chapter 2. 安装文档

71 2.6.2 静态资源 OSS 加速访问 # 先把静态资源上传或同步到 OSS, 如果使用其他工具上传, 注意设置文件 HTTP 头 # 静态文件夹包括 jumpserver/data/static 和 luna # Bucket ACL 设置为公共读 # 防盗链需要添加 Jumpserver 域名和 ossendpoint 域名 # 跨域设置需要添加 Jumpserver 域名和 ossendpoint 域名 # 在最前端的 nginx 代理服务器上进行设置 $ cd /etc/nginx $ vi conf.d/jumpserver.conf... # 根据自己的 OSS 所在地域和域名, 自行替换 yourbucket 和 yourendpoint location /static/ { rewrite ^/static/(.*)$ com/static/$1 permanent; add_header Access-Control-Allow-Origin ' yourendpoint.aliyuncs.com'; access_log off; } location ~ /luna/.*\.(svg eot ico woff woff2 ttf js css png json txt)$ { rewrite ^/luna/(.*)$ luna/$1 permanent; add_header Access-Control-Allow-Origin ' yourendpoint.aliyuncs.com'; access_log off; } # 设置完成后重启 nginx $ nginx -s reload 2.7 开机自启 Systemd 管理自启 一步一步安装适用 (CentOS 7) # Jumpserver $ vi /usr/lib/systemd/system/jms.service [Unit] Description=jms After=network.target mariadb.service redis.service Wants=mariadb.service redis.service [Service] Type=forking Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/ root/bin" ExecStart=/opt/jumpserver/jms start all -d ExecReload= ExecStop=/opt/jumpserver/jms stop ( 下页继续 ) 2.7. 开机自启 65

72 ( 续上页 ) [Install] WantedBy=multi-user.target # Coco $ vi /usr/lib/systemd/system/coco.service [Unit] Description=coco After=network.target jms.service [Service] Type=forking PIDFile=/opt/coco/coco.pid Environment="PATH=/opt/py3/bin" ExecStart=/opt/coco/cocod start -d ExecReload= ExecStop=/opt/coco/cocod stop [Install] WantedBy=multi-user.target # Guacamole $ chkconfig guacd on $ vi /usr/lib/systemd/system/guacamole.service [Unit] Description=guacamole After=network.target jms.service Wants=jms.service [Service] Type=forking # PIDFile=/config/tomcat8/tomcat.pid # BOOTSTRAP_TOKEN 根据实际情况修改 Environment="JUMPSERVER_SERVER= "JUMPSERVER_KEY_DIR=/config/ guacamole/keys" "GUACAMOLE_HOME=/config/guacamole" "BOOTSTRAP_TOKEN=******" ExecStart=/config/tomcat8/bin/startup.sh ExecReload= ExecStop=/config/tomcat8/bin/shutdown.sh [Install] WantedBy=multi-user.target # 开机自启设置 $ systemctl enable jms $ systemctl enable coco $ systemctl enable guacamole # 启动 $ systemctl start jms $ systemctl start coco $ systemctl start guacamole # 停止 $ systemctl stop jms $ systemctl stop coco $ systemctl stop guacamole 66 Chapter 2. 安装文档

73 2.7.2 Docker 组件部署自启 (Centos 7) 极速安装适用 (CentOS 7) 一体化部署适用 (CentOS 7) # Jumpserver $ vi /usr/lib/systemd/system/jms.service [Unit] Description=jms After=network.target mariadb.service redis.service docker.service Wants=mariadb.service redis.service docker.service [Service] Type=forking Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/ root/bin" ExecStart=/opt/jumpserver/jms start all -d ExecReload= ExecStop=/opt/jumpserver/jms stop [Install] WantedBy=multi-user.target # 启动 $ vi /opt/start_jms.sh #!/bin/bash set -e export LANG=zh_CN.UTF-8 systemctl start jms docker start jms_coco docker start jms_guacamole exit 0 # 停止 $ vi /opt/stop_jms.sh #!/bin/bash set -e export LANG=zh_CN.UTF-8 docker stop jms_coco docker stop jms_guacamole systemctl stop jms exit 0 # 写入 rc.local $ chmod +x /etc/rc.d/rc.local $ if [ "$(cat /etc/rc.local grep start_jms.sh)" == "" ]; then echo "sh /opt/start_ jms.sh" >> /etc/rc.local; fi 2.7. 开机自启 67

74 2.7.3 Docker 组件部署自启 (Ubuntu 18) 一体化部署适用 (Ubuntu 18) # Jumpserver $ vi /lib/systemd/system/jms.service [Unit] Description=jms After=network.target mysql.service redis-server.service docker.service Wants=mysql.service redis-server.service docker.service [Service] Type=forking Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/ root/bin" ExecStart=/opt/jumpserver/jms start all -d ExecReload= ExecStop=/opt/jumpserver/jms stop [Install] WantedBy=multi-user.target # 启动 $ vi /opt/start_jms.sh #!/bin/bash set -e export LANG=zh_CN.utf8 systemctl start jms docker start jms_coco docker start jms_guacamole exit 0 # 停止 $ vi /opt/stop_jms.sh #!/bin/bash set -e export LANG=zh_CN.utf8 docker stop jms_coco docker stop jms_guacamole systemctl stop jms exit 0 # 写入 rc.local $ chmod +x /etc/rc.d/rc.local $ if [ "$(cat /etc/rc.local grep start_jms.sh)" == "" ]; then echo "sh /opt/start_ jms.sh" >> /etc/rc.local; fi 68 Chapter 2. 安装文档

75 2.8 更新升级 x 升级到 请务必认真详细阅读每一个文字并理解后才能操作升级事宜 请先检查自己各组件的当前版本 不支持从 0.x 版本升级到 1.x 版本 本文档仅针对 1.0.x 的版本升级教程 从 1.4.x 版本开始 mysql 版本需要大于等于 5.6, mariadb 版本需要大于等于 更新配置文件需要把对应旧版本的设置复制到新的配置文件 0. 检查数据库表结构文件是否完整 # 为了保证能顺利升级, 请先检查数据库表结构文件是否完整 $ cd /opt/jumpserver/apps $ for d in $(ls); do if [ -d $d ] && [ -d $d/migrations ]; then ll ${d}/migrations/*. py grep -v init.py; fi; done # 新开一个终端, 连接到 jumpserver 的数据库服务器 $ mysql -uroot -p > use jumpserver; > select app, name from django_migrations where app in('assets', 'audits', 'common', 'ops', 'orgs', 'perms', 'terminal', 'users') order by app asc; # 如果左右对比信息不一致, 通过升级常见问题解决 丢失表结构文件参考升级常见问题 1. 备份 Jumpserver $ cp -r /opt/jumpserver /opt/jumpserver_bak $ mysqldump -uroot -p jumpserver > /opt/jumpserver.sql # 通过 releases 包升级需要还原这些文件, 通过 git pull 升级不需要执行 $ cd /opt/jumpserver_bak/apps $ for d in $(ls);do if [ -d $d ] && [ -d $d/migrations ];then cp ${d}/migrations/*.py /opt/jumpserver/apps/${d}/migrations/ fi done 2. 升级 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop $ git fetch $ git checkout $ mv config.py config_old.bak $ cp config_example.py config.py $ vi config.py # 把 config_old.bak 里面的对应设置填到新的配置文件 2.8. 更新升级 69

76 """ jumpserver.config ~~~~~~~~~~~~~~~~~ Jumpserver project setting file :copyright: (c) by Jumpserver Team :license: GPL v2, see LICENSE for more details. """ import os BASE_DIR = os.path.dirname(os.path.abspath( file )) class Config: # Use it to encrypt or decrypt data # Jumpserver 使用 SECRET_KEY 进行加密, 请务必修改以下设置 # 保持与你原来的 SECRET_KEY 一致, 可查看 config_old.bak SECRET_KEY = os.environ.get('secret_key') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut #(^wd=%s_qj$1%x' # Django security setting, if your disable debug model, you should setting that ALLOWED_HOSTS = ['*'] # DEBUG 模式 True 为开启 False 为关闭, 默认开启, 生产环境推荐关闭 # 注意 : 如果设置了 DEBUG = False, 访问 8080 端口页面会显示不正常, 需要搭建 nginx 代理才可以正常访问 DEBUG = os.environ.get("debug") or False # 日志级别, 默认为 DEBUG, 可调整为 INFO, WARNING, ERROR, CRITICAL, 默认 INFO LOG_LEVEL = os.environ.get("log_level") or 'WARNING' LOG_DIR = os.path.join(base_dir, 'logs') # 使用的数据库配置, 支持 sqlite3, mysql, postgres 等, 默认使用 sqlite3 # See # 默认使用 SQLite3, 如果使用其他数据库请注释下面两行 # DB_ENGINE = 'sqlite3' # DB_NAME = os.path.join(base_dir, 'data', 'db.sqlite3') # 请手动修改下面数据库设置, 保持与你原来的设置一致, 可查看 config_old.bak DB_ENGINE = os.environ.get("db_engine") or 'mysql' DB_HOST = os.environ.get("db_host") or ' ' DB_PORT = os.environ.get("db_port") or 3306 DB_USER = os.environ.get("db_user") or 'jumpserver' DB_PASSWORD = os.environ.get("db_password") or 'weakpassword' DB_NAME = os.environ.get("db_name") or 'jumpserver' # Django 监听的 ip 和端口 #./manage.py runserver :8080 HTTP_BIND_HOST = ' ' HTTP_LISTEN_PORT = 8080 # 请手动修改下面 Redis 设置, 保持与你原来的设置一致, 可查看 config_old.bak REDIS_HOST = os.environ.get("redis_host") or ' ' REDIS_PORT = os.environ.get("redis_port") or 6379 ( 下页继续 ) 70 Chapter 2. 安装文档

77 REDIS_PASSWORD = os.environ.get("redis_password") or '' REDIS_DB_CELERY = os.environ.get('redis_db') or 3 REDIS_DB_CACHE = os.environ.get('redis_db') or 4 ( 续上页 ) def init (self): pass def getattr (self, item): return None class DevelopmentConfig(Config): pass class TestConfig(Config): pass class ProductionConfig(Config): pass # Default using Config settings, you can write if/else for different env config = DevelopmentConfig() $ pip install -r requirements/requirements.txt $ cd utils $ sh make_migrations.sh # 1.0.x 升级到最新版本需要执行迁移脚本 ( 新版本授权管理更新, 升级前版本不是 1.0.x 请跳过 ) $ sh 2018_04_11_migrate_permissions.sh # 任意版本升级到 版本, 需要执行 ( 升级前版本小于 需要执行此步骤, 没有此文件则跳过 ) $ sh 2018_07_15_set_win_protocol_to_ssh.sh # 启动 jumpserver $ cd../ $./jms start all -d # 任意版本升级到 版本, 需要修改 nginx 配置 ( 升级前版本小于 需要执行此步骤 ) $ vi /etc/nginx/conf.d/jumpserver.conf # 部分用户的配置文件是 /etc/nginx/nginx.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; ( 下页继续 ) 2.8. 更新升级 71

78 } root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改 ( 续上页 ) location /static/ { root /opt/jumpserver/data/; } # 静态资源, 如果修改安装目录, 此处需要修改 location /socket.io/ { proxy_pass 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 /coco/ { proxy_pass 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 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 / { proxy_pass proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 保存后重新载入配置 $ nginx -s reload 升级到最新版本 请务必认真详细阅读每一个文字并理解后才能操作升级事宜 当前版本必须是 版本, 否则请先升级到 Chapter 2. 安装文档

79 从 版本开始, 由官方维护唯一 migrations 更新配置文件需要把对应旧版本的设置复制到新的配置文件 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop # 备份 Jumpserver $ cp -r /opt/jumpserver /opt/jumpserver_1.4.4_bak $ cd /opt/jumpserver $ git fetch $ git checkout master $ git pull $ git clean -df # 清除未跟踪文件, 请一定要做好备份后再操作此步骤 $ git reset --hard # 还原所有修改, 请一定要做好备份后再操作此步骤 $ git pull # 更新 config.yml, 请根据你原备份的 config.yml 内容进行修改 $ mv config.py config_1.4.4.bak $ cp config_example.yml config.yml $ BOOTSTRAP_TOKEN=`cat /dev/urandom tr -dc A-Za-z0-9 head -c 16` # 生成随机 BOOTSTRAP_TOKEN $ sed -i "s/bootstrap_token:/bootstrap_token: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/ config.yml $ echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc $ vi config.yml # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥升级请保证与你原来的 SECRET_KEY 一致, 可以从旧版本的 config_1.4.4.bak 配置文件里面获取 SECRET_KEY: ***** # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制, 可随机生成 BOOTSTRAP_TOKEN: ***** # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See ( 下页继续 ) 2.8. 更新升级 73

80 ( 续上页 ) # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: ***** DB_NAME: jumpserver # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver $ pip install -r requirements/requirements.txt $ cd utils $ vi 1.4.4_to_1.4.5_migrations.sh #!/bin/bash # host= # 修改成 Jumpserver 数据库服务器 IP port=3306 # 修改成 Jumpserver 数据库服务器端口 username=root # 修改成有权限对数据库进行删改的用户 db=jumpserver # 修改成 Jumpserver 数据库名称 echo " 备份原来的 migrations" ( 下页继续 ) 74 Chapter 2. 安装文档

81 mysqldump -u${username} -h${host} -P${port} -p ${db} django_migrations > django_ migrations.sql.bak ret=$? ( 续上页 ) if [ ${ret} == "0" ];then echo " 开始使用新的 migrations 文件 " mysql -u${username} -h${host} -P${port} -p ${db} < django_migrations.sql else echo "Not valid" fi $ sh 1.4.4_to_1.4.5_migrations.sh $ cd../ $./jms start all -d Coco 说明 : Docker 部署的请跳过 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ mv conf.py conf.bak $ git pull # 更新 config.yml, 请根据你原备份的 conf.bak 内容进行修改 $ cp config_example.yml config.yml $ sed -i "s/bootstrap_token: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml $ sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml $ vi config.yml # 项目名称, 会用来向 Jumpserver 注册, 识别而已, 不能重复 # NAME: {{ Hostname }} # Jumpserver 项目的 url, api 请求注册会使用 CORE_HOST: # Bootstrap Token, 预共享秘钥, 用来注册 coco 使用的 service account 和 terminal # 请和 jumpserver 配置文件中保持一致, 注册完成后可以删除 BOOTSTRAP_TOKEN: ***** # 启动时绑定的 ip, 默认 # BIND_HOST: # 监听的 SSH 端口号, 默认 2222 # SSHD_PORT: 2222 # 监听的 HTTP/WS 端口号, 默认 5000 # HTTPD_PORT: 5000 # 项目使用的 ACCESS KEY, 默认会注册, 并保存到 ACCESS_KEY_STORE 中, # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret # ACCESS_KEY: null ( 下页继续 ) 2.8. 更新升级 75

82 # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中 # ACCESS_KEY_STORE: data/keys/.access_key ( 续上页 ) # 加密密钥 # SECRET_KEY: null # 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL] LOG_LEVEL: ERROR # 日志存放的目录 # LOG_DIR: logs # SSH 白名单 # ALLOW_SSH_USER: all # SSH 黑名单, 如果用户同时在白名单和黑名单, 黑名单优先生效 # BLOCK_SSH_USER: # - # 和 Jumpserver 保持心跳时间间隔 # HEARTBEAT_INTERVAL: 5 # Admin 的名字, 出问题会提示给用户 # ADMINS: '' # SSH 连接超时时间 (default 15 seconds) # SSH_TIMEOUT: 15 # 语言 [en, zh] # LANGUAGE_CODE: zh # SFTP 的根目录, 可选 /tmp, Home 其他自定义目录 # SFTP_ROOT: /tmp # SFTP 是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false $ pip install -r requirements/requirements.txt $./cocod start -d Guacamole 说明 : Docker 部署的请跳过 $ cd /opt/docker-guacamole $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh $ git pull $ ln -sf /opt/docker-guacamole/guacamole war /config/tomcat8/webapps/root.war $ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver jar /config/guacamole/ extensions/guacamole-auth-jumpserver jar $ cd /config $ wget gz ( 下页继续 ) 76 Chapter 2. 安装文档

83 # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf linux-amd64.tar.gz -C /bin/ $ chmod +x /bin/ssh-forward # BOOTSTRAP_TOKEN 请和 jumpserver 配置文件中保持一致 $ export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN $ echo "export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh Luna 说明 : 直接下载 release 包 $ cd /opt $ rm -rf luna luna.tar.gz $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 注意把浏览器缓存清理下 Docker Coco Guacamole 说明 : Docker 部署的 coco 与 guacamole 升级说明 # 先到 Web 会话管理 - 终端管理删掉所有组件 $ docker stop jms_coco $ docker stop jms_guacamole $ docker rm jms_coco $ docker rm jms_guacamole $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: ( 续上页 ) # BOOTSTRAP_TOKEN 请和 jumpserver 配置文件中保持一致 $ Server_IP=`ip addr grep inet egrep -v '( inet6 docker)' awk '{print $2}' tr -d "addr:" head -n 1 cut -d / -f1` $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: # 到 Web 会话管理 - 终端管理查看组件是否已经在线 升级到最新版本 请务必认真详细阅读每一个文字并理解后才能操作升级事宜 更新配置文件需要把对应旧版本的设置复制到新的配置文件 2.8. 更新升级 77

84 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop $ cd /opt/jumpserver $ git pull # 更新 config.yml, 请根据你原来的 config.bak 内容进行修改 $ mv config.py config_1.4.5.bak $ cp config_example.yml config.yml $ vi config.yml # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥升级请保证与你原来的 SECRET_KEY 一致, 可以从旧版本的 config_1.4.5.bak 配置文件里面获取 SECRET_KEY: ***** # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制, 可随机生成 BOOTSTRAP_TOKEN: ***** # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver DB_PASSWORD: ***** DB_NAME: jumpserver # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 ( 下页继续 ) 78 Chapter 2. 安装文档

85 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 ( 续上页 ) # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver $ pip install -r requirements/requirements.txt $./jms start all -d Coco 说明 : Docker 部署的请跳过 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ mv conf.py conf.bak $ git pull # 更新 config.yml, 请根据你原备份的 conf.bak 内容进行修改 $ cp config_example.yml config.yml $ vi config.yml # 项目名称, 会用来向 Jumpserver 注册, 识别而已, 不能重复 # NAME: {{ Hostname }} # Jumpserver 项目的 url, api 请求注册会使用 CORE_HOST: # Bootstrap Token, 预共享秘钥, 用来注册 coco 使用的 service account 和 terminal # 请和 jumpserver 配置文件中保持一致, 注册完成后可以删除 BOOTSTRAP_TOKEN: ***** # 启动时绑定的 ip, 默认 # BIND_HOST: # 监听的 SSH 端口号, 默认 2222 ( 下页继续 ) 2.8. 更新升级 79

86 # SSHD_PORT: 2222 ( 续上页 ) # 监听的 HTTP/WS 端口号, 默认 5000 # HTTPD_PORT: 5000 # 项目使用的 ACCESS KEY, 默认会注册, 并保存到 ACCESS_KEY_STORE 中, # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret # ACCESS_KEY: null # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中 # ACCESS_KEY_STORE: data/keys/.access_key # 加密密钥 # SECRET_KEY: null # 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL] LOG_LEVEL: ERROR # 日志存放的目录 # LOG_DIR: logs # SSH 白名单 # ALLOW_SSH_USER: all # SSH 黑名单, 如果用户同时在白名单和黑名单, 黑名单优先生效 # BLOCK_SSH_USER: # - # 和 Jumpserver 保持心跳时间间隔 # HEARTBEAT_INTERVAL: 5 # Admin 的名字, 出问题会提示给用户 # ADMINS: '' # SSH 连接超时时间 (default 15 seconds) # SSH_TIMEOUT: 15 # 语言 [en, zh] # LANGUAGE_CODE: zh # SFTP 的根目录, 可选 /tmp, Home 其他自定义目录 # SFTP_ROOT: /tmp # SFTP 是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false $ pip install -r requirements/requirements.txt $./cocod start -d Guacamole 说明 : Docker 部署的请跳过 $ cd /opt/docker-guacamole $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh ( 下页继续 ) 80 Chapter 2. 安装文档

87 ( 续上页 ) $ git pull $ ln -sf /opt/docker-guacamole/guacamole war /config/tomcat8/webapps/root.war $ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver jar /config/guacamole/ extensions/guacamole-auth-jumpserver jar $ cd /config $ wget gz # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf linux-amd64.tar.gz -C /bin/ $ chmod +x /bin/ssh-forward # BOOTSTRAP_TOKEN 请和 jumpserver 配置文件中保持一致 $ export BOOTSTRAP_TOKEN=***** $ echo "export BOOTSTRAP_TOKEN=*****" >> ~/.bashrc $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh Luna 说明 : 直接下载 release 包 $ cd /opt $ rm -rf luna luna.tar.gz $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 注意把浏览器缓存清理下 Docker Coco Guacamole 说明 : Docker 部署的 coco 与 guacamole 升级说明 # 先到 Web 会话管理 - 终端管理删掉所有组件 $ docker stop jms_coco $ docker stop jms_guacamole $ docker rm jms_coco $ docker rm jms_guacamole $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: # BOOTSTRAP_TOKEN 请和 jumpserver 配置文件中保持一致 $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=***** jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=***** jumpserver/jms_guacamole: # 到 Web 会话管理 - 终端管理查看组件是否已经在线 2.8. 更新升级 81

88 升级到最新版本 请务必认真详细阅读每一个文字并理解后才能操作升级事宜 更新配置文件需要把对应旧版本的设置复制到新的配置文件 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop $ cd /opt/jumpserver $ git pull # 更新 config.yml, 请根据你原来的 config.bak 内容进行修改 $ mv config.py config_1.4.6.bak $ cp config_example.yml config.yml $ vi config.yml # SECURITY WARNING: keep the secret key used in production secret! # 加密秘钥升级请保证与你原来的 SECRET_KEY 一致, 可以从旧版本的 config_1.4.6.bak 配置文件里面获取 SECRET_KEY: ***** # SECURITY WARNING: keep the bootstrap token used in production secret! # 预共享 Token coco 和 guacamole 用来注册服务账号, 不在使用原来的注册接受机制, 可随机生成 BOOTSTRAP_TOKEN: ***** # Development env open this, when error occur display the full process track, Production disable it # DEBUG 模式开启 DEBUG 后遇到错误时可以看到更多日志 DEBUG: false # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See en/1.10/topics/logging/ # 日志级别 LOG_LEVEL: ERROR # LOG_DIR: # Session expiration setting, Default 24 hour, Also set expired on on browser close # 浏览器 Session 过期时间, 默认 24 小时, 也可以设置浏览器关闭则过期 # SESSION_COOKIE_AGE: SESSION_EXPIRE_AT_BROWSER_CLOSE: true # Database setting, Support sqlite3, mysql, postgres... # 数据库设置 # See # SQLite setting: # 使用单文件 sqlite 数据库 # DB_ENGINE: sqlite3 # DB_NAME: # MySQL or postgres setting like: # 使用 Mysql 作为数据库 DB_ENGINE: mysql DB_HOST: DB_PORT: 3306 DB_USER: jumpserver ( 下页继续 ) 82 Chapter 2. 安装文档

89 DB_PASSWORD: ***** DB_NAME: jumpserver ( 续上页 ) # When Django start it will bind this host and port #./manage.py runserver :8080 # 运行时绑定端口 HTTP_BIND_HOST: HTTP_LISTEN_PORT: 8080 # Use Redis as broker for celery and web socket # Redis 配置 REDIS_HOST: REDIS_PORT: 6379 # REDIS_PASSWORD: # REDIS_DB_CELERY: 3 # REDIS_DB_CACHE: 4 # Use OpenID authorization # 使用 OpenID 来进行认证设置 # BASE_SITE_URL: # AUTH_OPENID: false # True or False # AUTH_OPENID_SERVER_URL: # AUTH_OPENID_REALM_NAME: realm-name # AUTH_OPENID_CLIENT_ID: client-id # AUTH_OPENID_CLIENT_SECRET: client-secret # OTP settings # OTP/MFA 配置 # OTP_VALID_WINDOW: 0 # OTP_ISSUER_NAME: Jumpserver $ pip install -r requirements/requirements.txt $./jms start all -d Coco 说明 : Docker 部署的请跳过 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ mv conf.py conf.bak $ git pull # 更新 config.yml, 请根据你原备份的 config.yml 内容进行修改 $ cp config_example.yml config.yml $ vi config.yml # 项目名称, 会用来向 Jumpserver 注册, 识别而已, 不能重复 # NAME: {{ Hostname }} # Jumpserver 项目的 url, api 请求注册会使用 CORE_HOST: # Bootstrap Token, 预共享秘钥, 用来注册 coco 使用的 service account 和 terminal # 请和 jumpserver 配置文件中保持一致, 注册完成后可以删除 ( 下页继续 ) 2.8. 更新升级 83

90 BOOTSTRAP_TOKEN: ***** ( 续上页 ) # 启动时绑定的 ip, 默认 # BIND_HOST: # 监听的 SSH 端口号, 默认 2222 # SSHD_PORT: 2222 # 监听的 HTTP/WS 端口号, 默认 5000 # HTTPD_PORT: 5000 # 项目使用的 ACCESS KEY, 默认会注册, 并保存到 ACCESS_KEY_STORE 中, # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret # ACCESS_KEY: null # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中 # ACCESS_KEY_STORE: data/keys/.access_key # 加密密钥 # SECRET_KEY: null # 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL] LOG_LEVEL: ERROR # 日志存放的目录 # LOG_DIR: logs # SSH 白名单 # ALLOW_SSH_USER: all # SSH 黑名单, 如果用户同时在白名单和黑名单, 黑名单优先生效 # BLOCK_SSH_USER: # - # 和 Jumpserver 保持心跳时间间隔 # HEARTBEAT_INTERVAL: 5 # Admin 的名字, 出问题会提示给用户 # ADMINS: '' # SSH 连接超时时间 (default 15 seconds) # SSH_TIMEOUT: 15 # 语言 [en, zh] # LANGUAGE_CODE: zh # SFTP 的根目录, 可选 /tmp, Home 其他自定义目录 # SFTP_ROOT: /tmp # SFTP 是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false $ pip install -r requirements/requirements.txt $./cocod start -d Guacamole 84 Chapter 2. 安装文档

91 说明 : Docker 部署的请跳过 $ cd /opt/docker-guacamole $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh $ git pull $ ln -sf /opt/docker-guacamole/guacamole war /config/tomcat8/webapps/root.war $ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver jar /config/guacamole/ extensions/guacamole-auth-jumpserver jar $ cd /config $ wget gz # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf linux-amd64.tar.gz -C /bin/ $ chmod +x /bin/ssh-forward # BOOTSTRAP_TOKEN 请和 jumpserver 配置文件中保持一致 $ export BOOTSTRAP_TOKEN=***** $ echo "export BOOTSTRAP_TOKEN=*****" >> ~/.bashrc $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh Luna 说明 : 直接下载 release 包 $ cd /opt $ rm -rf luna luna.tar.gz $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 注意把浏览器缓存清理下 Docker Coco Guacamole 说明 : Docker 部署的 coco 与 guacamole 升级说明 # 先到 Web 会话管理 - 终端管理删掉所有组件 $ docker stop jms_coco $ docker stop jms_guacamole $ docker rm jms_coco $ docker rm jms_guacamole $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: # BOOTSTRAP_TOKEN 请和 jumpserver 配置文件中保持一致 $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=***** jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=***** jumpserver/jms_guacamole: ( 下页继续 ) 2.8. 更新升级 85

92 ( 续上页 ) # 到 Web 会话管理 - 终端管理查看组件是否已经在线 升级到最新版本 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop $ git pull $ pip install -r requirements/requirements.txt $ cd../ $./jms start all -d Coco 说明 : Docker 部署的请跳过 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ git pull $ pip install -r requirements/requirements.txt $./cocod start -d Guacamole 说明 : Docker 部署的请跳过 $ cd /opt/docker-guacamole $ git pull $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh $ ln -sf /opt/docker-guacamole/guacamole war /config/tomcat8/webapps/root.war $ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver jar /config/guacamole/ extensions/guacamole-auth-jumpserver jar $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh Luna 说明 : 直接下载 release 包 $ cd /opt $ rm -rf luna luna.tar.gz $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 注意把浏览器缓存清理下 86 Chapter 2. 安装文档

93 Docker Coco Guacamole 说明 : Docker 部署的 coco 与 guacamole 升级说明 # 先到 Web 会话管理 - 终端管理删掉所有组件 $ docker stop jms_coco $ docker stop jms_guacamole $ docker rm jms_coco $ docker rm jms_guacamole $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=****** jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=****** jumpserver/jms_guacamole: # 到 Web 会话管理 - 终端管理查看组件是否已经在线 升级到最新版本 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop $ git pull $ pip install -r requirements/requirements.txt $ cd../ $./jms start all -d Coco 说明 : Docker 部署的请跳过 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ git pull $ pip install -r requirements/requirements.txt $./cocod start -d Guacamole 说明 : Docker 部署的请跳过 $ cd /opt/docker-guacamole $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh $ git pull $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh Luna 说明 : 直接下载 release 包 2.8. 更新升级 87

94 $ cd /opt $ rm -rf luna luna.tar.gz $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 注意把浏览器缓存清理下 Docker Coco Guacamole 说明 : Docker 部署的 coco 与 guacamole 升级说明 # 先到 Web 会话管理 - 终端管理删掉所有组件 $ docker stop jms_coco $ docker stop jms_guacamole $ docker rm jms_coco $ docker rm jms_guacamole $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: # 到 Web 会话管理 - 终端管理查看组件是否已经在线 升级到最新版本 Jumpserver $ cd /opt/jumpserver $ source /opt/py3/bin/activate $./jms stop $ git pull $ pip install -r requirements/requirements.txt $ cd../ $./jms start all -d Coco 说明 : Docker 部署的请跳过 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ git pull $ pip install -r requirements/requirements.txt $./cocod start -d Guacamole 说明 : Docker 部署的请跳过 88 Chapter 2. 安装文档

95 $ cd /opt/docker-guacamole $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh $ git pull $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh Luna 说明 : 直接下载 release 包 $ cd /opt $ rm -rf luna luna.tar.gz $ wget # 如果网络有问题导致下载无法完成可以使用下面地址 $ wget $ tar xf luna.tar.gz $ chown -R root:root luna # 注意把浏览器缓存清理下 Docker Coco Guacamole 说明 : Docker 部署的 coco 与 guacamole 升级说明 # 先到 Web 会话管理 - 终端管理删掉所有组件 $ docker stop jms_coco $ docker stop jms_guacamole $ docker rm jms_coco $ docker rm jms_guacamole $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco: $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole: # 到 Web 会话管理 - 终端管理查看组件是否已经在线 2.9 服务迁移 对 Jumpserver 服务进行迁移, 只需要备份 " 数据库 " 和 "jumpserver 目录 " 即可注 :1.4.5 及之后的版本迁移, 只需要迁移 " 数据库 " " 配置文件 " 和 " 录像目录 " 1. 备份数据到新的服务器 # 导出 jumpserver 数据库到新的服务器 $ mysqldump -uroot -p jumpserver > /opt/jumpserver.sql # 把 jumpserver.sql 拷贝到新的服务器 /opt 目录 # 复制 Jumpserve 目录到新的服务器 /opt 目录 2. 配置新服务器 ( 注意 mysql-server 的版本要与旧服务器一致 ) 2.9. 服务迁移 89

96 $ localedef -c -f UTF-8 -i zh_cn zh_cn.utf-8 $ export LC_ALL=zh_CN.UTF-8 $ echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf $ yum -y install wget gcc epel-release git $ yum -y install mariadb mariadb-devel mariadb-server $ yum -y install redis $ systemctl enable redis $ systemctl enable mariadb $ systemctl start redis $ systemctl start mariadb $ mysql -uroot > create database jumpserver default charset 'utf8'; > grant all on jumpserver.* to 'jumpserver'@' ' identified by 'weakpassword'; > use jumpserver; > source /opt/jumpserver.sql; > quit $ yum -y install python36 python36-devel $ cd /opt $ python3.6 -m venv py3 $ source /opt/py3/bin/activate $ cd /opt/jumpserver/requirements $ yum -y install $(cat rpm_requirements.txt) $ pip install --upgrade pip setuptools $ pip install -r requirements.txt 3. 修改配置文件 $ cd /opt/jumpserver $ vi config.yml # 把数据库和 redis 信息修改并保存 4. 启动 jumpserver $./jms start all 5. 其他组件参考安装文档重新设置即可 90 Chapter 2. 安装文档

97 CHAPTER 3 管理文档 这里介绍管理员功能 3.1 快速入门 说明 到 Jumpserver 会话管理 - 终端管理查看 Coco Guacamole 等应用是否在线 一 系统设置 1.1 基本设置 # 修改 url 的 "localhost" 为你的实际 url 地址, 否则邮件收到的地址将为 "localhost" 也无法创建新用户 91

98 1.2 邮件设置 # 点击页面上边的 " 邮件设置 ", 进入邮件设置页面 # 默认使用 25 端口, 不勾选 SSL 和 TLS; 如果需要勾选 SSL, 端口需要修改成 465; 如果需要勾选 TLS, 端口需要改成 587 # 不可以同时勾选 SSL 和 TLS # 配置邮件服务后, 点击页面的 " 测试连接 " 按钮, 如果配置正确, Jumpserver 会发送一条测试邮件到您的 SMTP 账号邮箱里面, 确定收到测试邮件后点击保存即可使用 92 Chapter 3. 管理文档

99 1.3 LDAP 设置 # 如果不需要使用 "ldap" 用户登陆 jumpserver, 可以直接跳过, 不需要设置 # 先 " 测试 " 通过才能保存 # DN 和 OU 一定要完整 ( 如 "DN:cn=Manage,ou=Jumpserver,dc=jumpserver,ou=org") # 注 : 可借用第三方 gui 工具查看 ldap 用户的属性, 新版本已经支持中文名登录, 即 cn= 中文也可正常使用 3.1. 快速入门 93

100 参考 LDAP 使用说明 1.4 终端设置 # " 密码认证 " 和 " 密钥认证 " 是 SSH 连接跳板机时所使用的认证方式 ( 都不选会造成无法使用 SSH 方式连接登录跳板机, 不影响 web 登录 ) # "Telnet 成功正则表达式 " telnet 设备登陆失败需要设置 # " 命令存储 "" 录像存储 " 位置设置 # " 命令存储 "" 录像存储 " 修改后, 需要在 Jumpserver 会话管理 - 终端管理修改 terminal 的配置录像存储命令记录, 然后重启 Jumpserver 服务 # 设置后重启 Coco 才能生效 94 Chapter 3. 管理文档

101 3.1. 快速入门 95

102 1.5 安全设置 # "MAF 二次认证 " 勾选会开启全局强制 "MFA", 所有 jumpserver 用户必须使用动态口令进行认证登录 ( 即时生效 ) # " 限制登录失败 " 和 " 限制登录时间 " 设置需要重启 jumpserver 才能生效 # "SSH 最大空闲时间 " 设置需要重启 coco 才能生效 # " 密码校验规则 " 设置立即生效 96 Chapter 3. 管理文档

103 3.1.3 二 用户管理 2.1 创建 Jumpserver 用户 # 点击页面左侧 " 用户列表 " 菜单下的 " 用户列表 ", 进入用户列表页面 # 点击页面左上角 " 创建用户 " 按钮, 进入创建用户页面, ( 也可以通过右上角导入模版进行用户导入 ) # 其中, 用户名即 Jumpserver 登录账号 ( 具有唯一性, 不能重名 ) 名称为页面右上角用户标识 ( 可重复 ) # 成功提交用户信息后, Jumpserver 会发送一条设置 " 用户密码 " 的邮件到您填写的用户邮箱 # 点击邮件中的设置密码链接, 设置好密码后, 您就可以用户名和密码登录 Jumpserver 了 # 用户首次登录 Jumpserver, 会被要求完善用户信息, 按照向导操作即可 注 :MFA 即 Google Authenticator, 使用此软件需要 APP 时间与浏览器时间同步 3.1. 快速入门 97

104 3.1.4 三 资产管理 3.1 编辑资产树 # " 节点 " 不能重名, 右击节点可以添加 删除和重命名节点, 以及进行资产相关的操作注 : 如果有 linux 资产和 windows 资产, 建议先建立 Linux 节点与 Windows 节点, 不然 " 授权 " 时不好处理 98 Chapter 3. 管理文档

105 3.2 创建管理用户 # " 管理用户 " 是资产上的 root, 或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来推送系统用户 获取资产硬件信息等 Windows 或其它硬件可以随意设置一个 # " 名称 " 不能重复 # "ssh 私钥 " 如果私钥有密码, 请把 key 的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥 3.1. 快速入门 99

106 3.3 创建系统用户 # " 系统用户 " 是 Jumpserver 跳转登录资产时使用的用户, 用户使用该用户登录资产 # " 自动生成密码 " " 自动推送 " "Sudo" 等功能需要对应资产的 " 管理用户 " 是且有 root 权限, 否则自动推送失败 # ssh 协议的 "Sudo" 栏设定用户的 sudo 权限, # ssh 协议如果创建的 " 系统用户 " 已在资产上面存在, " 推送 " 将会覆盖掉原用户的 "home" 目录权限 ( 注 : 替换成 700 权限 ) # ssh 协议的 "ssh 私钥 " 如果私钥有密码, 请把 key 的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥 # 这里简单举几个 "sudo" 设置例子 Sudo /bin/su # 当前系统用户可以免 sudo 密码执行 sudo su 命令 Sudo /usr/bin/git, /usr/bin/php, /bin/cat, /bin/more, /bin/less, /usr/bin/tail # 当前系统用户可以免 sudo 密码执行 git php cat more less tail Sudo!/usr/bin/yum # 当前系统用户不可以执行 sudo yum 命令 # 此处的权限应该根据使用用户的需求汇总后定制, 原则上给予最小权限即可 # " 系统用户 " 创建时, 如果选择了 " 自动推送 " Jumpserver 会使用 "Ansible" 自动推送系统用户到资产中, "root" 用户不支持推送 # 如果资产 ( 交换机 Windows) 不支持 "Ansible", 请去掉 " 自动生成密钥 " " 自动推送 " 勾选 手动填写资产上已有的账号及账号密码 # 如果想让用户登录资产时自己输入密码, 可以在创建系统用户时选择 " 手动登录 " 100 Chapter 3. 管理文档

107 3.4 创建命令过滤 如无需要, 可忽略此步骤, 目前仅支持 ssh 与 telnet 协议 3.1. 快速入门 101

108 # " 系统用户 " 可以绑定一些 " 命令过滤器 ", 一个过滤器可以定义一些 " 规则 " # 当 " 用户 " 使用这个 " 系统用户 " 登录资产, 然后执行一个命令这个命令需要被绑定过滤器的所有规则匹配, 高优先级先被匹配 # 当一个规则匹配到了, 如果规则的动作是 " 允许 " 这个命令会被放行 ; 如果规则的动作是 " 禁止 " 命令将会被禁止执行 ; 否则就匹配下一个规则, 如果最后没有匹配到规则, 则允许执行 # 点击 " 命令过滤器列表 " 规则下方的数字进入 " 命令过滤器规则列表 ", 点击新建规则创建相应规则 # 拒绝所有命令可以使用正则表达式.* 102 Chapter 3. 管理文档

109 3.5 创建网域网关 如无需要, 可忽略此步骤, 支持代理 SSH RDP 和 VNC # " 网域 " 功能是为了解决部分环境无法直接连接而新增的功能, 原理是通过网关服务器进行跳转登录 # 点击页面左侧的 " 网域列表 " 按钮, 查看所有网域列表 # 点击页面左上角的 " 创建网域 " 按钮, 进入网域创建页面, 选择资产里用作网域的网关服务器注 : 混合云适用 3.1. 快速入门 103

110 # 点击 " 网域 " 的名称, 进入 " 网域详情 " 列表 # 点击页面的 " 网关 " 按钮, 选择网关列表的 " 创建网关 " 按钮, 进入网关创建页面, 填写网关信息 # IP 信息一般默认填写网域资产的 IP 即可 ( 如用作网域的资产有多块网卡和 IP 地址, 选能与 jumpserer 通信的任一 IP 即可 ) 注 : 用户名与密码可以使用网关资产上已存在的任一拥有执行 ssh 命令权限的用户 104 Chapter 3. 管理文档

111 注 : 保存信息后点击 " 测试连接 ", 确定设置无误后到资产列表添加需要使用 " 网关 " 登录的资产即可注 : "Windows 资产 " 可以使用 "ssh 网关 " 3.6 创建资产 # 点击页面左侧的 " 资产管理 " 菜单下的 " 资产列表 " 按钮, 查看当前所有的资产列表 # 点击页面左上角的 " 创建资产 " 按钮, 进入资产创建页面, 填写资产信息 # IP 地址和管理用户要确保正确, 确保所选的管理用户的用户名和密码能 " 牢靠 " 地登录指定的 IP 主机上 # 资产的系统平台也务必正确填写 公网 IP 信息只用于展示, 可不填, Jumpserver 连接资产使用的是 IP 信息 3.1. 快速入门 105

112 # 资产创建信息填写好保存之后, ssh 协议资产可 " 测试资产 " 是否能正确连接, 其他协议暂不支持注 : 被连接资产需要 "python" 组件, 且版本大于等于 2.6, Ubuntu 等资产默认不允许 root 用户远程 ssh 登录, 请自行处理 # 如果资产不能正常连接, 请检查 " 管理用户 " 的用户名和密钥是否正确以及该 " 管理用户 " 是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上 SSH 协议参考 SSH 协议资产连接说明 RDP 协议参考 RDP 协议资产连接说明 Telnet 协议参考 Telnet 协议资产连接说明 四 创建授权规则 4.1 为用户分配资产 # " 名称 ", 授权的名称, 不能重复 # " 用户 " 和 " 用户组 " 二选一, 不推荐即选择用户又选择用户组 # " 资产 " 和 " 节点 " 二选一, 选择节点会包含节点下面的所有资产 # " 系统用户 ", 及所选的用户或用户组下的用户能通过该系统用户使用所选节点或者节点下的资产 # 用户 ( 组 ), 资产 ( 节点 ), 系统用户是一对一的关系, 所以当拥有 Linux Windows 不同类型资产时, 应该分别给 Linux 资产和 Windows 资产创建授权规则 一般情况下, 资产授权给个人, 节点授权给用户组, 一个授权只能选择一个系统用户 106 Chapter 3. 管理文档

113 3.1.6 五 用户登录 5.1 登录 Jumpserver # 用户只能看到自己被管理员授权了的 " 资产 ", 如果登录后无资产, 请联系管理员进行确认 3.1. 快速入门 107

114 5.2 连接资产 # 在我的资产点击资产右边的 " 连接 " 快速连接资产 # 也可以点击左侧栏的 "Web 终端 " 108 Chapter 3. 管理文档

115 # 点击 " 资产 " 名字, 就连上资产了 # 如果显示连接超时, 请参考 FAQ 文档进行处理 5.3 断开资产 # 点击页面顶部的 "Server" 按钮会弹出选个选项, 第一个断开所选的连接, 第二个断开所有连接 5.4 文件管理 # 点击 " 文件管理 " # 先在左边选择资产, 目前只支持自动登录的 SSH 协议资产 # 也可以使用 sftp 方式进行文件管理 参考 SFTP 连接说明 3.1. 快速入门 109

116 以上就是 Jumpserver 的简易入门了, Jumpserver 还有很多功能等待您去发现 在使用过程中, 如果遇到什么问题, 可以在文档的 " 联系方式 " 一栏找到我们 3.2 用户管理 一 用户列表 1.1 创建用户点击页面左侧 " 用户列表 " 菜单下的 " 用户列表 ", 进入用户列表页面 110 Chapter 3. 管理文档

117 点击页面左上角 " 创建用户 " 按钮, 进入创建用户页面, 填写账户, 角色安全, 个人等信息 其中, 用户名即 Jumpserver 登录账号 用户是用于资产授权, 当某个资产对一个用户授权后, 这个用户就使用这个资产了 角色用于区分一个用户是管理员还是普通用户 3.2. 用户管理 111

118 成功提交用户信息后, Jumpserver 会发送一条设置 " 用户密码 " 的邮件到您填写的用户邮箱 点击邮件中的设置密码链接, 设置好密码后, 您就可以用户名和密码登录 Jumpserver 了 二 用户组 2.1 创建用户组 用户组, 顾名思义, 给用户分组 用户组信息很有用, 在分配资产权限的时候, 针对的某个用户组下的所有用户, 可以为一个用户分配多个用户组 点击页面左侧 " 用户管理 " 菜单下的 " 用户组 ", 进入用户组列表页面 点击页面左上角 " 创建用户组 " 按钮, 进入创建用户组页面 : 名称即用户组名称, 建议填写简单明了有用的信息 创建用户组的时候可以把已存在的用户加入到该分组中, 一个用户可以存在多个分组中 112 Chapter 3. 管理文档

119 3.3 资产管理 一 资产列表 1.1 管理资产树资产树节点不能重名, 右击节点可以添加 删除和重命名节点, 以及进行资产相关的操作 3.3. 资产管理 113

120 1.2 为资产树节点创建资产 在资产列表页面, 先在左侧选择资产要加入的节点, 然后在右侧选择创建资产 114 Chapter 3. 管理文档

121 3.3.2 二 网域列表 网域功能是为了解决部分环境 ( 如 : 混合云 ) 无法直接连接而新增的功能, 原理是通过网关服务器进行跳转登录 2.1 网域列表 2.2 创建网域 在网域列表页面, 在右侧选择创建网域 3.3. 资产管理 115

122 2.3 网关列表 2.4 创建网关 在网域列表页面, 点击网关下面的数字进入网关列表, 点击创建网关, 网关可以是一台任意装有 ssh 服务的资 116 Chapter 3. 管理文档

123 产 三 管理用户 管理用户是资产 ( 被控服务器 ) 上的 root, 或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来推送系统用户 获取资产硬件信息等 暂不支持 Windows 或其它硬件, 可以随意设置一个 3.1 管理用户列表 3.3. 资产管理 117

124 3.2 创建管理用户 118 Chapter 3. 管理文档

125 3.3.4 四 系统用户 系统用户是 Jumpserver 跳转登录资产时使用的用户, 可以理解为登录资产用户, 如 web, sa, dba(ssh 而不是使用某个用户的用户名跳转登录服务器 (ssh 简单来说是用户使用自己的用户名登录 Jumpserver, Jumpserver 使用系统用户登录资产 系统用户创建时, 如果选择了自动推送 Jumpserver 会使用 ansible 自动推送系统用户到资产中, 如果资产 ( 交换机 windows) 不支持 ansible, 请手动填写账号密码 目前还不支持 Windows 的自动推送 4.1 系统用户列表 4.2 创建系统用户 3.3. 资产管理 119

126 3.3.5 五 标签管理 给资产打上标签便于查询和管理 标签信息有名称和值 : 名称可以是描述功能信息, 例如 : 用途, 值则可以 120 Chapter 3. 管理文档

127 是具体信息, 例如 : 组织 1- 部门 1- 研发 标签创建的时候可以选择为已存在的资产打上该标签 5.1 标签列表 5.2 创建标签 点击页面左上角 " 创建标签 " 按钮, 进入创建标签页面 : 3.3. 资产管理 121

128 标签名称可以重名, 一个资产可以有多个标签产 标签删除, 资产上的标签信息会自动消失 六 命令过滤 系统用户可以绑定一些命令过滤器, 一个过滤器可以定义一些规则当用户使用这个系统用户登录资产, 然后执行一个命令这个命令需要被绑定过滤器的所有规则匹配, 高优先级先被匹配, 当一个规则匹配到了, 如果规则的动作是允许, 这个命令会被放行, 如果规则的动作是禁止, 命令将会被禁止执行, 否则就匹配下一个规则, 如果最后没有匹配到规则, 则允许执行 6.1 命令过滤器列表 122 Chapter 3. 管理文档

129 6.2 创建命令过滤器 在命令过滤器列表页面点击创建命令过滤器 6.3 命令过滤器规则列表 3.3. 资产管理 123

130 在命令过滤器列表页面点击规则下面的数字进入规则页面 6.4 创建规则 在命令过滤器列表页面点击规则下面的数字进入规则页面, 点击创建规则 124 Chapter 3. 管理文档

131 3.4 权限管理 一 资产授权把资产授权给用户后, 用户才能在 " 我的资产 " 里面看到资产, 配置正确后用户才能正常连接资产 1.1 查看授权列表 1.2 创建授权规则 节点, 对应的是资产, 代表该节点下的所有资产 用户组, 对应的是用户, 代表该用户组下所有的用户 系统用户, 及所选的用户组下的用户能通过该系统用户使用所选节点下的资产 节点, 用户组, 系统用户是一对一的关系, 所以当拥有 Linux Windows 不同类型资产时, 应该分别给 Linux 资产和 Windows 资产创建授权规则 资产或节点可以授权给个人或用户组, 一个授权建议只指定一个系统用户 ( 多系统用户会按照优先级进行排序, 高优先自动登陆, 同时存在多个并级系统用户时, 用户需要自己选择系统用户 ) 3.4. 权限管理 125

132 3.5 会话管理 一 在线会话 1.1 查看在线会话点击页面左侧 " 会话管理 " 菜单下的 " 在线会话 " 按钮, 进入在线会话列表页面, 默认展示最近 7 天的记录 用户 : 在线的用户名 资产 : 登录的资产名称 系统用户 : 用户使用那哪个系统用户登录的资产 远端地址 : 登录用户的 IP 地址 终端地址 : 登录所以使用的终端的 IP 地址, 列如 Coco 命令 : 用户执行了多少条命令 开始日期 : 登录的时间 时长 : 在线时长 126 Chapter 3. 管理文档

133 可以查看指定的在线记录, 比如, 指定用户 资产或系统用户 1.2 中断会话管理员可以手动中断当前在线的会话 已中断的会话会记录到 " 历史会话 " 里面 二 历史会话 2.1 查看历史会话 历史会话同在线会话包含的信息一样, 都有用户 资产和 IP 地址等信息 3.5. 会话管理 127

134 2.2 查看历史话录像 Jumpserver 提供历史会话的录像观看 点击左侧的 " 回放 " 按钮, 即可观看录像 三 命令记录 命令记录里面存放的是用户在资产上执行过哪些命令, 单击一行记录, 会展示命令执行的结果 : 128 Chapter 3. 管理文档

135 点击 " 转到 " 连接, 会跳转到详细的会话页面, 如果会话已结束可以查看会话录像, 如果会话正在线可中断会话 : 四 Web 终端 Web 终端是资产使用界面, 管理员和用户都是从这里登录到资产上, 执行操作 点击资产名字连接资产, 点击 "Server" 下的 "Disconnect" 断开资产连接 3.5. 会话管理 129

136 3.5.5 五 文件管理 文件管理允许对 SSH 协议资产进行文件上传下载创建删除操作 ( 不支持上传文件夹 ), 目前也不支持系统用户是手动登录的资产 130 Chapter 3. 管理文档

137 3.5.6 六 终端管理 终端列表页面列出了 Jumpserver 正在使用的终端有哪些, 例如 :Coco Gua 等 终端第一次使用, 会首先向 Jumpserver 发送请求注册, 在 Jumpserver 中接受注册后就可以正常使用该终端了 3.5. 会话管理 131

138 3.6 作业中心 一 任务列表 作业是 Jumpserver 向其所管理下的资产发送的指令, 例如, 测试资产可连接性 获取资产硬件信息 测试管理用户可连接性和测试系统用户可连接性等命令 默认展示最近 7 天的作业记录 132 Chapter 3. 管理文档

139 点击作业名称可以查看作业的具体详情 作业的历史版本以及作业执行的历史记录 二 批量命令 可以通过该功能快速下发命令到资产, 目前仅支持能被 ansible 管理的资产, 要求系统用户登陆方式为自动登陆 3.6. 作业中心 133

140 3.7 日志审计 一 登陆日志 134 Chapter 3. 管理文档

141 二 FTP 日志 三 操作日志 3.7. 日志审计 135

142 四 改密日志 五 批量命令 136 Chapter 3. 管理文档

143 3.8 系统设置 点击页面左侧 " 系统设置 " 按钮, 进入系统设置页面, 查看基本设置 邮件设置 LDAP 设置和终端设置等内容 一 基本设置 点击页面上边的 " 基本设置 " 按钮, 进入基本设置页面, 编辑当前站点 URL 用户向导 URL 主题前缀等信息, 点击 " 提交 " 按钮, 基本设置完成 3.8. 系统设置 137

144 3.8.2 二 邮件设置 点击页面上边的 " 邮件设置 " 按钮, 进入邮件设置页面 : 138 Chapter 3. 管理文档

145 3.8.3 三 LDAP 设置 点击页面上边的 " LDAP 设置 " 按钮, 进入 LDAP 设置页面, 编辑 LDAP 地址 DN 用户 OU 用户过滤器 LDAP 属性映射和是否使用 SSL 是否启用 LDAP 认证等信息, 点击 " 测试连接 " 按钮, 测试是否正确设置, 点击 " 提交 " 按钮, 完成 LDAP 设置 如果这里有问题请手动用 ldapsearch 命令测试一下, 如果能唯一搜索出这个用户代表你的设置是对的, 然后根据用户的属性填写映射关系 # 注意下面的 testuser 对应的是你 ldap server 上存在的用户, 填写到配置中需要改为 %(user)s ldapsearch -x -W -H ldap:// :389 -b "ou=people,dc=xxx,dc=com" -D "cn=admin, dc=xxx,dc=com" "(cn=testuser)" ldapsearch -x -W -H ldap:// :389 -b "dc=xxx,dc=com" -D "cn=admin,dc=xxx,dc=com " "(&(cn=testuser)(objectclass=account))" # extended LDIF # # LDAPv3 # base <ou=people,dc=xxx,dc=com> with scope subtree # filter: (cn=*) # requesting: ALL # # testuser, People, xxx.com dn: uid=testuser,ou=people,dc=xxx,dc=com uid: testuser # 打算使用该属性映射为 jumpserver username cn: testuser # 打算使用该属性映射为 jumpserver name mail: xyz@google.coom # 打算使用该属性映射为 jumpserver objectclass: account objectclass: posixaccount ( 下页继续 ) 3.8. 系统设置 139

146 objectclass: top objectclass: shadowaccount... ( 续上页 ) 参考 "FAQ 文档 " 的 LDAP 使用说明 <faq_ldap.html> 四 终端设置 点击页面上边的 " 终端设置 " 按钮, 进入终端设置页面, 编辑终端信息, 点击 " 提交 " 按钮, 终端设置完成 资产列表排序项, 可以选择按主机名或者 IP 来排序, 默认是按主机名排序 心跳间隔指的是 Coco 和 Gua 等终端向 Jumpserver 发送心跳信息的频率, 如果 Jumpserver 长时间 (1 个小时 ) 未收到 Coco 和 Gua 发送的心跳数据, Jumpserver 则认为该终端也 " 死掉 ", 在 " 会话管理 " 下的 " 终端管理 " 页面会显示该终端已掉线 140 Chapter 3. 管理文档

147 五 安全设置 点击页面上边的 " 安全设置 " 按钮, 进入安全设置页面 3.8. 系统设置 141

148 142 Chapter 3. 管理文档

149 CHAPTER 4 用户文档 这部分给您介绍 Jumpserver 的用户使用文档 4.1 我的资产 这里显示自己被授权了的资产列表, 可以通过资产右侧的连接功能快速连接资产 143

150 4.2 命令执行 可以通过该功能快速下发命令到资产, 目前仅支持能被 ansible 管理的资产, 要求系统用户登陆方式为自动登陆 # 在左侧先勾选资产, 在右下角根据需要切换系统用户, 在下方输入需要执行的命令, 点击执行即可 # 仅支持标准的 shell 命令, 如 : sudo ifconfig 4.3 个人信息 显示当前用户的个人信息, 右侧的功能可以根据个人所需进行设置 144 Chapter 4. 用户文档

151 4.4 Web 终端 通过 web 连接资产 4.4. Web 终端 145

152 除了使用浏览器登录 Jumpserver 外, 还可使用命令行登录 : 命令行登录 Jumpserver 使用如下命令 : $ ssh -p 2222 IP 地址 4.5 文件管理 在左侧选择资产后, 可以进入管理员预设的资产目录 ( 默认 /tmp ), 可跨资产复制粘贴文件, 目前仅支持 ssh 协议且系统用户要求登陆方式为自动登陆 146 Chapter 4. 用户文档

153 4.5. 文件管理 147

154 148 Chapter 4. 用户文档

155 CHAPTER 5 开发文档 5.1 REST API 规范约定 这里仅考虑 REST API 的基本情况 参考 RESTful API 设计指南 Github API 文档 协议 API 与用户的通信协议, 总是使用 HTTPS 协议 域名 这版 API 相对简单, 没有前后端分离, 没有独立 APP, 所以放在主域名下 版本 将 API 的版本号放入 URL 中, 由于一个项目多个 APP 所以 Jumpserver 使用以下风格, 将版本号放到 APP 后面 [GET, POST] [GET, PUT, DELETE] 149

156 5.1.4 路径 路径又称 " 终点 "(endpoint), 表示 API 的具体网址 在 RESTful 架构中, 每个网址代表一种资源 (Resource), 所以网址中不能有动词, 只能有名词, 而且所用的名词往往与数据库的表格名对应 一般来说, 数据库中的表都是同种记录的 " 集合 "(Collection), 所以 API 中的名词也应该使用复数 举例来说 Cmdb 中的 Assets 列表, IDC 列表 [GET, POST] [GET, PUT, DELETE] [GET, POST] 一般性的增删查改 (CRUD)API, 完全使用 HTTP Method 加上 URL 提供的语义, URL 中的可变部分 ( 比如上面提到的 ), 一般用来传递该 API 操作的核心实体对象的唯一 ID, 如果有更多的参数需要提供, GET 方法请使用 URL Parameter( 例如 :"?client_id=xxxxx&app_id=xxxxxx"), PUT/POST/DELETE 方法请使用请求体传递参数 HTTP Method 对于资源的具体操作类型, 由 HTTP 动词表示 常用的 HTTP 动词有下面五个 ( 括号里是对应的 SQL 命令 ) GET(SELECT): 从服务器取出资源 ( 一项或多项 ) POST(CREATE): 在服务器新建一个资源 PUT(UPDATE): 在服务器更新资源 ( 客户端提供改变后的完整资源, 幂等 PATCH(UPDATE): 在服务器更新资源 ( 客户端提供改变的属性 ) DELETE(DELETE): 从服务器删除资源 过滤信息 常见参数约定?keyword=localhost 模糊搜索?limit=10: 指定返回记录的数量?offset=10: 指定返回记录的开始位置?page=2&per_page=100: 指定第几页, 以及每页的记录数?sort=name&order=asc: 指定返回结果按照哪个属性排序, 以及排序顺序?asset_id=1: 指定筛选条件 状态码服务器向用户返回的状态码和提示信息, 常见的有以下一些 ( 方括号中是该状态码对应的 HTTP 动词 ) 200 OK - [GET]: 服务器成功返回用户请求的数据, 该操作是幂等的 (Idempotent) 201 CREATED - [POST/PUT/PATCH]: 用户新建或修改数据成功 202 Accepted - [*]: 表示一个请求已经进入后台排队 ( 异步任务 ) 204 NO CONTENT - [DELETE]: 用户删除数据成功 150 Chapter 5. 开发文档

157 400 INVALID REQUEST - [POST/PUT/PATCH]: 用户发出的请求有错误, 服务器没有进行新建或修改数据的操作, 该操作是幂等的 401 Unauthorized - [*]: 表示用户没有权限 ( 令牌 用户名 密码错误 ) 403 Forbidden - [*] 表示用户得到授权 ( 与 401 错误相对 ), 但是访问是被禁止的 404 NOT FOUND - [*]: 用户发出的请求针对的是不存在的记录, 服务器没有进行操作, 该操作是幂等的 406 Not Acceptable - [GET]: 用户请求的格式不可得 ( 比如用户请求 JSON 格式, 但是只有 XML 格式 ) 410 Gone -[GET]: 用户请求的资源被永久删除, 且不会再得到的 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时, 发生一个验证错误 500 INTERNAL SERVER ERROR - [*]: 服务器发生错误, 用户将无法判断发出的请求是否成功 错误处理 如果状态码是 4xx, 就应该向用户返回出错信息 一般来说, 返回的信息中将 error 作为键名, 出错信息作为键值即可 { } error: "Invalid API key" 返回结果 针对不同操作, 服务器向用户返回的结果应该符合以下规范 GET /collection: 返回资源对象的列表 ( 数组 ) GET /collection/resource: 返回单个资源对象 POST /collection: 返回新生成的资源对象 PUT /collection/resource: 返回完整的资源对象 PATCH /collection/resource: 返回完整的资源对象 DELETE /collection/resource: 返回一个空文档 Hypermedia API RESTful API 最好做到 Hypermedia, 即返回结果中提供链接, 连向其他 API 方法, 使得用户不查文档, 也知道下一步应该做什么 比如, 当用户向 api.example.com 的根目录发出请求, 会得到这样一个文档 {"link": { "rel": "collection "href": " "title": "List of zoos", "type": "application/vnd.yourformat+json" }} 上面代码表示, 文档中有一个 Link 属性, 用户读取这个属性就知道下一步该调用什么 API 了 rel 表示这个 API 与当前网址的关系 (Collection 关系, 并给出该 Collection 的网址 ) href 表示 API 的路径 title 表示 API 的标题 5.1. REST API 规范约定 151

158 type 表示返回类型 Hypermedia API 的设计被称为 HATEOAS Github API 就是这种设计 其它 (1)API 的身份认证应该使用 OAuth 2.0 框架 (2) 服务器返回的数据格式, 应该尽量使用 JSON 5.2 Jumpserver 项目规范 (Draft) 语言框架 1. Python Django Flask Luna 4. Paramiko Coco Django 规范 1. 尽量使用 Class Base View 编程, 更少代码 2. 使用 Django Form 3. 每个 URL 独立命名, 不要硬编码, 同理 Static 也是 4. 数据库表名手动指定, 不要使用默认 5. 代码优雅简洁 6. 注释明确优美 7. 测试案例尽可能完整 8. 尽可能利用 Django 造好的轮子 代码风格 Python 方面大致的风格, 我们采用 pocoo 的 Style Guidance, 但是有些细节部分会尽量放开参考国内翻译 基本的代码布局 缩进 1. Python 严格采用 4 个空格的缩进, 任何 Python 代码都都必须遵守此规定 2. Web 部分代码 (HTML CSS JavaScript), Node.js 采用 2 空格缩进, 同样不使用 TAB 之所以与 Python 不同, 是因为 JS 中有大量回调式的写法, 2 空格可以显著降低视觉上的负担 152 Chapter 5. 开发文档

159 最大行长度 按 PEP8 规范, Python 一般限制最大 79 个字符, 但是 Django 的命名, URL 等通常比较长, 而且 21 世纪都是宽屏了, 所以我们限制最大 120 字符 补充说明 :HTML 代码不受此规范约束 长语句缩进 编写长语句时, 可以使用换行符 "" 换行 在这种情况下, 下一行应该与上一行的最后一个 "." 句点或 "=" 对齐, 或者是缩进 4 个空格符 this_is_a_very_long(function_call, 'with many parameters') \.that_returns_an_object_with_an_attribute MyModel.query.filter(MyModel.scalar > 120) \.order_by(mymodel.name.desc()) \.limit(10) 如果你使用括号 "()" 或花括号 "{}" 为长语句换行, 那么下一行应与括号或花括号对齐 : this_is_a_very_long(function_call, 'with many parameters', 23, 42, 'and even more') 对于元素众多的列表或元组, 在第一个 "[" 或 "(" 之后马上换行 : items = [ 'this is the first', 'set of items', 'with more items', 'to come in this line', 'like this' ] 空行 顶层函数与类之间空两行, 此外都只空一行 不要在代码中使用太多的空行来区分不同的逻辑模块 def hello(name): print 'Hello %s!' % name def goodbye(name): print 'See you %s.' % name class MyClass(object): """This is a simple docstring.""" def init (self, name): self.name = name def get_annoying_name(self): return self.name.upper() + '!!!!111' 5.2. Jumpserver 项目规范 (Draft) 153

160 语句和表达式 一般空格规则 1. 单目运算符与运算对象之间不空格 ( 例如, -, ~ 等 ), 即使单目运算符位于括号内部也一样 2. 双目运算符与运算对象之间要空格 exp = value = (item_value / item_count) * offset / exp value = my_list[index] value = my_dict['key'] 比较 1. 任意类型之间的比较, 使用 "==" 和 "!=" 2. 与单例 (singletons) 进行比较时, 使用 is 和 is not 3. 永远不要与 True 或 False 进行比较 ( 例如, 不要这样写 :foo == False, 而应该这样写 :not foo) 否定成员关系检查 使用 foo not in bar, 而不是 not foo in bar 命名约定 1. 类名称 : 采用骆驼拼写法 (CamelCase), 首字母缩略词保持大写不变 (HTTPWriter, 而不是 HttpWriter) 2. 变量名 : 小写 _ 以及 _ 下划线 (lowercase_with_underscores) 3. 方法与函数名 : 小写 _ 以及 _ 下划线 (lowercase_with_underscores) 4. 常量 : 大写 _ 以及 _ 下划线 (UPPERCASE_WITH_UNDERSCORES) 5. 预编译的正则表达式 :name_re 6. 受保护的元素以一个下划线为前缀 双下划线前缀只有定义混入类 (mixin classes) 时才使用 7. 如果使用关键词 (keywords) 作为类名称, 应在名称后添加后置下划线 (trailing underscore) 允许与内建变量重名, 不要在变量名后添加下划线进行区分 如果函数需要访问重名的内建变量, 请将内建变量重新绑定为其他名称 8. 命名要有寓意, 不使用拼音, 不使用无意义简单字母命名 ( 循环中计数例外 for i in) 9. 命名缩写要谨慎, 尽量是大家认可的缩写 函数和方法的参数 : 1. 类方法 :cls 为第一个参数 2. 实例方法 :self 为第一个参数 3. property 函数中使用匿名函数 (lambdas) 时, 匿名函数的第一个参数可以用 x 替代, 例如 :display_name = property(lambda x: x.real_name or x.username) 154 Chapter 5. 开发文档

161 文档注释 (Docstring, 即各方法, 类的说明文档注释 ) 所有文档字符串均以 restructuredtext 格式编写, 方便 Sphinx 处理 文档字符串的行数不同, 布局也不一样 如果只有一行, 代表字符串结束的三个引号与代表字符串开始的三个引号在同一行 如果为多行, 文档字符串中的文本紧接着代表字符串开始的三个引号编写, 代表字符串结束的三个引号则自己独立成一行 ( 有能力尽可能用英文, 否则请中文优雅注释 ) def foo(): """This is a simple docstring.""" def bar(): """This is a longer docstring with so much information in there that it spans three lines. In this case, the closing triple quote is on its own line. """ 文档字符串应分成简短摘要 ( 尽量一行 ) 和详细介绍 如果必要的话, 摘要与详细介绍之间空一行 模块头部 模块文件的头部包含有 utf-8 编码声明 ( 如果模块中使用了非 ASCII 编码的字符, 建议进行声明 ), 以及标准的文档字符串 # -*- coding: utf-8 -*- """ package.module ~~~~~~~~~~~~~~ """ A brief description goes here. :copyright: (c) YEAR by AUTHOR. :license: LICENSE_NAME, see LICENSE_FILE for more details. 注释 (Comment) 注释的规范与文档字符串编写规范类似 二者均以 restructuredtext 格式编写 如果使用注释来编写类属性的文档, 请在 # 符号后添加一个冒号 ":" ( 有能力尽可能用英文, 否则请中文优雅注释 ) class User(object): #: the name of the user as unicode string name = Column(String) #: the sha1 hash of the password + inline salt pw_hash = Column(String) 5.3 项目骨架 说明如下 ( 需要更新 ): 5.3. 项目骨架 155

162 . config-example.py docs README.md LICENSE README.md install logs apps assets admin.py apps.py api.py init.py migrations init.py models.py static assets some_image.png templates assets asset_list.html templatetags tests.py urls.py utils.py 只是请求和返回不同 views.py common templatetags utils.py views.py fixtures init.json fake.json jumpserver init.py settings.py urls.py wsgi.py manage.py static i18n templates // 配置文件样例 // 所有 DOC 文件放到该目录 // 安装说明 // 日志目录 // 管理后台目录, 也是各 APP 所在目录 // APP 目录 // 新版本 Django APP 设置文件 // API 文件 // 对外暴露的接口, 放到该文件中, 方便别的 APP 引用 // Models Migrations 版本控制目录 // 数据模型目录 // APP 下静态资源目录, 如果需要 // 多一层目录, 防止资源重名 // APP 下模板目录 // 多一层目录, 防止资源重名 // 模板标签目录 // 测试用例文件 // Urlconf 文件 // 将 Views 和 API 可复用的代码放在这里, API 和 Views // Views 文件 // 通用 Template Tag // 通用的函数方法 // 初始化数据目录 // 初始化项目数据库 // 生成大量测试数据 // 项目设置目录 // 项目设置文件 // 项目入口 Urlconf // 项目静态资源目录 // 项目多语言目录 // 项目模板目录 5.4 API 文档 通过访问 的 URL 地址 /docs 来访问 ( 如 ) 注 : 需要打开 debug 模式 $ vi jumpserver/config.yml... Debug: true 156 Chapter 5. 开发文档

163 手动调用 api 的方法 $ curl -X POST -H 'Content-Type: application/json ' -d '{"username": "admin", "password": "admin"}' # 获取 token {"token":"937b38011acf499eb474e2fecb424ab3"} # 获取到的 token # 如果开启了 MFA, 则返回的是 seed, 需要携带 seed 和 otp_code 再次提交一次才能获取到 token curl -X POST -H 'Content-Type: application/json' - d '{"username": "admin", "password": "admin"}' {"code":101, "msg":" 请携带 seed 值, 进行 MFA 二次认证 ", "otp_url":"/api/users/v1/otp/auth/", "seed":"629ba0935a624bd9b21e31c19e0cc8cb"} $ curl -X POST -H 'Content-Type: application/ json' -H 'cache-control: no-cache' -d '{"seed": "629ba0935a624bd9b21e31c19e0cc8cb", "otp_code": "202123"}' {"token":"937b38011acf499eb474e2fecb424ab3"} # otp_code 为动态密码 $ curl -H 'Authorization: Bearer 937b38011acf499eb474e2fecb424ab3' -H "Content- Type:application/json" # 使用 token 访问, token 有效期 1 小时 # 也可以创建一个永久 private_token, 避免二次认证 $ python manage.py shell >>> from users.models import User >>> u = User.objects.get(username='admin') >>> u.create_private_token() 937b38011acf499eb474e2fecb424ab3 $ curl -H 'Authorization: Token 937b38011acf499eb474e2fecb424ab3' -H "Content- Type:application/json" python 代码示例 import requests import json from pprint import pprint def get_token(): url = ' query_args = { "username": "admin", "password": "admin" } response = requests.post(url, data=query_args) return json.loads(response.text)['token'] def get_user_info(): url = ' token = get_token() header_info = { "Authorization": 'Bearer ' + token } ( 下页继续 ) 5.4. API 文档 157

164 response = requests.get(url, headers=header_info) ( 续上页 ) pprint(json.loads(response.text)) get_user_info() 158 Chapter 5. 开发文档

165 CHAPTER 6 贡献者 感谢以下朋友为 Jumpserver 做出的贡献, 世界因你们而不同, 排名不分先后 halcyon < 王墉 > DevOps 资深开发者, 核心开发者之一 jiaxiangkong < 陈尚委 > Jumpserver 测试运营 liuz < 刘正 > 全栈工程师编写了 Web Terminal 大部分代码 yumaojun03 < 喻茂峻 > DevOps 资深开发者, 擅长 Python Go 以及 PaaS 平台开发 kelianchun < 柯连春 > DevOps 资产开发者, 修复了很多 Bugs 小 < 李磊 > Django 资深开发者, 为用户模块贡献了很多代码 sofia < 周小侠 > 资深前端工程师, 前端代码贡献者 q4speed < 莫 > 架构师, 贡献了 Windows 远程桌面登录大部分代码 ZhangFengyi < 张峰毅 > 贡献了新版文档 Aaron3S < 沈晨阳 > 贡献了新版文档 liqiang-fit2cloud < 张立强 > 版本测试, 给资产树设计贡献了很多建议 wojiushixiaobai < 吴育煌 > 完善文档, 测试 bug, 热心帮助过很多朋友 159

166 160 Chapter 6. 贡献者

167 CHAPTER 7 联系方式 7.1 商业支持 阿里云市场购买 : 7.2 QQ 群 群 1: ( 满 ) 群 2: ( 满 ) 群 3: ( 满 ) 群 4: ( 满 ) 群 5: ( 新 ) 7.3 Github 官网 161

168 7.5 Demo 邮件 162 Chapter 7. 联系方式

169 CHAPTER 8 Snapshot 截图 8.1 仪表盘 163

170 8.2 用户管理 8.3 资产管理 164 Chapter 8. Snapshot 截图

171 8.4 Linux 终端 8.5 Windows 终端 8.4. Linux 终端 165

172 166 Chapter 8. Snapshot 截图

173 CHAPTER 9 FAQ 9.1 MFA 使用说明 Multi-Factor Authentication (MFA) 遵循基于时间的一次性密码 (TOTP) 标准 (RFC 6238) # 关闭也是在这里, 点击此处的重置即可 # 部分安卓手机无法使用 Google Authenticator, 可以尝试使用系统自带的 扫一扫 工具 # 或者尝试使用第三方软件 ( 如 Microsoft Authenticator 身份宝等 ) MFA 遗失无法登陆 # 普通用户联系管理员关闭 MFA, 登录成功后用户在个人信息里面重新绑定. # 如果管理员遗失无法登陆, 修改数据库 users_user 表对应用户的 otp_level 为 0, 重新登陆绑定即可 $ mysql -uroot > use jumpserver; > update users_user set otp_level='0' where username='admin'; # admin 为你要修改的用户 # 如果在系统设置里面开启的 MFA 二次认证, 需要修改数据库 settings 表 SECURITY_MFA_ AUTH 的 value 值为 false mysql -uroot > use jumpserver; > update settings set value='false' where name='security_mfa_auth'; 9.2 LDAP 使用说明 LDAP 支持使用 LADP 与 Windows AD 的用户作为 jumpserver 登录用户 已经存在的用户不能与要登录的 LDAP 用户有用户名和邮箱同名, 具有唯一性 1. LDAP 设置说明 167

174 LDAP 地址 ldap://serverurl:389 或者 ldaps://serverurl:636( 需要勾选 ssl) # 此处是设置 LDAP 的服务器, 推荐使用 IP, 防止解析问题 绑定 DN cn=administrator,cn=users,dc=jumpserver,dc=org # 这里是设置认证用户的信息, jumpserver 会使用这个用户去校验 ldap 的信息是否正确 密码 # 上面认证用户的密码 用户 OU ou=jumpserver,dc=jumpserver,dc=org # 这里是设置用来登录 jumpserver 的组织单元, 比如我要用某个 ou 的用户来登录 jumpserver # 多 OU 用法 ou=jumpserver,dc=jumpserver,dc=org ou=user,dc=jumpserver,dc=org ou=xxx, dc=jumpserver,dc=org 用户过滤器 (cn=%(user)s) # 这里是设置筛选 ldap 用户的哪些属性, 不能有多余的空格 LADP 属性映射 {"username": "cn", "name": "sn", " ": "mail"} username name 是 jumpserver 的用户属性 ( 不可更改 ) cn sn mail 是 ldap 的用户属性 ( 可自定义 ) # 这里的意思是, 把 ldap 用户的属性映射到 jumpserver 上 使用 SSL # 勾选后 LDAP 地址需要设置成 ldaps://serverurl:636 启动 LDAP 认证 # 如果需要使用 LDAP 或域用户登录 jumpserver, 则必选 2. 补充 DN 一定要是完整的 DN, 不能跳过 OU, 可以使用其他工具查询如 :cn=admin,ou=aaa,dc=jumpserver,dc=org, 必须要写成 cn=admin,ou=aaa,dc=jumpserver,dc=org 不能缩写成 cn=admin,dc=jumpserver,dc=org 用户 OU 用户 OU 可以只写顶层 OU, 不写子 OU 如 :ou=aaa,ou=bbb,ou=ccc,dc=jumpserver,dc=org, 可以只写 ou=ccc,dc=jumpserver,dc=org, 根据需求自行修改 用户过滤器筛选用户的规则, 点击测试连接就是根据这个规则到用户 OU 里面去检索用户, 可以自定义规则如 :(uid=%(user)s) 或 (samaccountname=%(user)s) 等, 这里的属性需要与下面的属性映射设置一致 LADP 属性映射 username name 这三项不可修改删除, 属性映射的字段必须存在, 且登录用户名和邮件不可以重复如 :{"username": "uid", "name": "sn", " ": "mail"} 或 {"username": "samaccountname ", "name": "cn", " ": "mail"} "username": "uid" 这里的 uid 必须和上面的 (uid=%(user)s) 这里的 uid 一致如果上面是 (samaccountname=%(user)s) 那么下面也应该修改为 {"username": "samaccountname", username 是 jumpserver 的用户用户名, name 是 jumpserver 的用户名称, mail 是 jumpserver 用户的邮箱属性映射的意思是把 ldap 的什么属性来作为 jumpserver 的用户用户名, 把 ldap 的什么属性作为 jumpserver 的用户名称, 把 ldap 的什么属性作为 jumpserver 的用户邮箱 9.3 sftp 使用说明 在 Windows 上使用 sftp 工具传输文件到 Linux 系统, 默认的上传目录在 /tmp 168 Chapter 9. FAQ

175 # 连接成功后, 可以看到当前拥有权限的资产, 打开资产, 然后选择系统用户, 即可到资产的 /tmp 目录 $ sftp -P2222 admin@ # Linux 语法 $ sftp 2222 admin@ # xshell 语法 $ ls 列出资产目录 $ cd 你的资产 $ ls 列出你的系统用户 $ cd 你的系统用户 # 此处即是当前资产的 home 目录 如果需要修改 /tmp 为其他目录 $ vi coco/conf.yml # SFTP 的根目录, 可选 /tmp, Home 其他自定义目录 SFTP_ROOT: /tmp # SFTP 是否显示隐藏文件 # SFTP_SHOW_HIDDEN_FILE: false 9.4 Telnet 使用说明 资产的创建与系统用户的创建选择 telnet 1. telnet 连不上 # 需要在 Web " 系统设置 "-" 终端设置 " 添加成功判断代码 # 是通过 "tenlet" 命令登录 telnet 设备 " 成功 " 的返回字符串 # 保存后需要重启 coco 组件 2. 举例 $ telnet Login authentication login: admin password: ********* Info: The max number or VTY users is 10, and the number of current VTY users on line is 1. <RA-L7-RD> # 把 <RA-L7-RD> 写入到 Web " 系统设置 "-" 终端设置 "-"Telnet 成功正则表达式 " 里面, 多个不一样的字符串用 隔开, 如 <RA-L7-RD> <CHXZ-Group-S7503-LB2> success 成功 # <RA-L7-RD> 正则可用 <.*>+? 表示 9.5 Docker 使用说明 1. 查看所有镜像 $ docker images 9.4. Telnet 使用说明 169

176 2. 查看所有创建的容器 $ docker ps -a 3. 查看正在运行的容器 $ docker ps 4. 进入正在运行的容器 $ docker exec -it < 容器的 CONTAINER ID 或者容器 NAMES > /bin/bash # 例 : $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days :8081->8080/tcp jms_guacamole $ docker exec -it ecda634206af /bin/bash 或 docker exec -it jms_guacamole /bin/bash 5. 开始停止重启容器 $ docker start < 容器的 CONTAINER ID 或者容器 NAMES > $ docker stop < 容器的 CONTAINER ID 或者容器 NAMES > $ docker restart < 容器的 CONTAINER ID 或者容器 NAMES > # 例 : $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days :8081->8080/tcp jms_guacamole $ docker start ecda634206af 或 docker start jms_guacamole $ docker stop ecda634206af 或 docker stop jms_guacamole $ docker restart ecda634206af 或 docker restart jms_guacamole 6. 查看容器 log $ docker logs -f < 容器的 CONTAINER ID 或者容器 NAMES > # 例 : $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days :8081->8080/tcp jms_guacamole $ docker logs -f ecda634206af 或 docker logs -f jms_guacamole 7. 删除容器 $ docker rm < 容器的 CONTAINER ID 或者容器 NAMES > # 例 : $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ( 下页继续 ) 170 Chapter 9. FAQ

177 ( 续上页 ) ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days :8081->8080/tcp jms_guacamole $ docker rm ecda634206af 或 docker rm jms_guacamole 8. 删除镜像 $ docker rmi < 镜像的 CONTAINER ID> # 例 : $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE jumpserver/guacamole test e0c2ec53a8fd 13 days ago 1.23GB $ docker rmi e0c2ec53a8fd 9. 更新镜像 $ docker pull < 镜像地址 : 版本 > # 例 : $ docker pull jumpserver/jms_all:latest $ docker pull jumpserver/jms_coco: $ docker pull jumpserver/jms_guacamole: Radius 使用说明 支持使用 Radius 的用户作为 jumpserver 登录用户 1. 修改 Jumpserver 配置文件启用 Radius 认证 $ vi /opt/jumpserver/config.yml # 在最后新增下面内容 AUTH_RADIUS: True RADIUS_SERVER: RADIUS_PORT: 1812 RADIUS_SECRET: radius_secret # 修改完成后保存, 重启 jumpserver 即可 2. 设置参数说明 # RADIUS_SERVER: 是 Radius 服务器的 IP 地址 # RADIUS_PORT: 1812 是 Radius 服务器的端口 # RADIUS_SECRET: radius_secret 是 Radius 服务器的预共享秘钥 # freeradius 的 SECRET 在 clients.conf 里面 # 思科的 SECRET 可以从 web 页面的 RADIUS Authentication Settings 里面的 Shared Secret 获取 # 华为的 SECRET 可以从 web 页面的 Authentication Options 里面的 Shared Secret 获取 # 其他厂商的请自行咨询相关厂商工作人员 # 实际案例 AUTH_RADIUS: True RADIUS_SERVER: ( 下页继续 ) 9.6. Radius 使用说明 171

178 RADIUS_PORT: 1812 RADIUS_SECRET: testing123 ( 续上页 ) 9.7 安装过程中常见的问题 1. git clone 提示 ssl 错误 # 一般是由于时间不同步, 或者网络有问题导致的 # 可以尝试下载 releases 包 2. pip install 提示 ssl 错误 # 参考第一条解决 3. pip install 提示 download 错误 # 一般是由于网络不好, 导致下载文件失败, 重新执行命令即可 # 如果多次重试均无效, 请更换网络环境 4. pip install 提示 Could not find a version that satisfies the requirement xxxxxx==x.x.xx( 版本 ) # 一般是由于镜像源未同步, -i 指定官方源即可, 如 : $ pip install -r requirement.txt -i $ pip install xxxxx==x.x.xx -i 5. pip install 提示 install for mysqlclient... error /usr/bin/ld: 找不到 -lmariadb # 如果是 Mariadb 大于 10 版本 $ yum install MariaDB-shared 6. sh make_migrations.sh 时报错 from config import config as CONFIG File "/opt/jumpserver/config.yml", line 38 # 这是由于 config.yml 里面的内容格式不对, 请参考安装文档的说明, 把提示的内容与上一行对齐即可 7. sh make_migrations.sh 时报错 Are you sure it s installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment? # 一般是由于 py3 环境未载入 $ source /opt/py3/bin/activate # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行 (py3) [root@localhost py3] # 如果已经在 py3 虚拟环境下, 任然报 Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment? $ cd /opt/jumpserver/requirements $ pip install -r requirements.txt # 然后重新执行 sh make_migrations.sh 8. sh make_migrations.sh 报错 CommandError: Conflicting migrations detected; multiple... django_celery_beat Chapter 9. FAQ

179 # 这是由于 django-celery-beat 老版本有 bug 引起的 $ rm -rf /opt/py3/lib/python3.6/site-packages/django_celery_beat/migrations/ $ pip uninstall django-celery-beat $ pip install django-celery-beat 9. 执行./jms start all 后一直卡在 beat: Waking up in 1.00 minute. # 如果没有 error 提示进程无法启动, 那么这是正常现象 # 如果不想在前台启动, 可以使用./jms start all -d 在后台启动 10. 执行./jms start all 后提示 xxx is stopped # Error: xxx start error # xxx is stopped $./jms restart xxx # 如./jms restart gunicorn 11. 执行./jms start all 后提示 WARNINGS:?: (mysql.w002) MySQL Strict Mode is not set for database connection default... # 这是严格模式的警告, 可以参考后面的 url 解决, 或者忽略 12. 启动 Jumpserver 或者 coco 报错 Error: expected <document start>, but found <scalar> # 这是因为你的 config.yml 文件格式有误 # 常见的错误就是字段为空或者 : 后面有一个空格 # SECRET_KEY: xxxxx # 不要忽略 : 后面的空格 13. 启动 jumpserver 后, 访问 8080 端口页面显示不正常 # 这是因为你在 config.yml 里面设置了 DEBUG: false # 跟着教程继续操作, 后面搭建 nginx 代理即可正常访问 14. 执行./cocod start 后提示 No module named jms # 一般是由于 py3 环境未载入 $ source /opt/py3/bin/activate # 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行 (py3) [root@localhost py3] # 如果已经在 py3 虚拟环境下 $ cd /opt/coco/ $ pip install -r requirements/requirements.txt # 然后重新执行./cocod start 即可 15. 执行./cocod start 后提示 Failed register terminal xxxx exist already # 这是由于 coco 注册未成功造成的, 需要重新注册 ( 能正常访问 jumpserver 页面后再处理 ) # 到 Jumpserver 后台会话管理 - 终端管理删掉 coco 的注册 # 必须到 Jumpserver 后台会话管理 - 终端管理删掉 coco 的注册 # 一定要先到 Jumpserver 后台会话管理 - 终端管理删掉 coco 的注册 $ cd /opt/coco &&./cocod stop $ rm /opt/coco/data/keys/.access_key # coco, 如果你是按文档安装的, key 应该在这里, 如果不存在 key 文件直接下一步 $./cocod start -d # 正常运行后到 Jumpserver 会话管理 - 终端管理里面接受 coco 注册 16. 执行./cocod start 后提示 Failed register terminal unknow: xxxx 9.7. 安装过程中常见的问题 173

180 # 这是因为当前系统的 hostname 有 coco 不支持的字符, 需要手动指定 coco 的 NAME $ cd /opt/coco/ $ vi config.yml # 项目名称, 会用来向 Jumpserver 注册, 识别而已, 不能重复 # NAME: {{ Hostname }} NAME: localhost # 保存后重新执行./cocod start 即可 17. 运行./cocod start 后提示 "detail":" 身份认证信息未提供 " Failed register terminal # 保证 coco 的 BOOTSTRAP_TOKEN 与 jumpserver/config.yml 里面的内容不一致 $ cat /opt/jumpserver/config.yml grep BOOTSTRAP_TOKEN $ cat /opt/coco/config.yml grep BOOTSTRAP_TOKEN # 修改成一致保存后重新执行./cocod start 即可 18. 运行./cocod start 后提示 Connect endpoint error: HTTPConnectionPool(host= xxxx, port=8080) # 这是因为 coco 无法连接到 jumpserver 报的错误, 确定 设置正确 ( 配置文件 coco/ config.yml) # 如果 jumpserver 的 IP 和端口不对, 请手动修改 config.yml 的 CORE_HOST 19. 运行./cocod start 后提示 Unexpected error occur: AppService object has no attribute get_system_user_cmd_filter_rules # 这是因为你的 pip 依赖包未正确安装, 参考本文档第 4 条 20. 通过 nginx 代理的端口访问 jumpserver 页面显示不正常 # 这是因为你没有按照教程进行安装, 修改了安装目录, 需要在 nginx 的配置文件里面修改资源路径 $ vi /etc/nginx/conf.d/jumpserver.conf... server { listen 80; # 代理端口, 以后将通过此端口进行访问, 不再通过 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 /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/; } # 静态资源, 如果修改安装目录, 此处需要修改 ( 下页继续 ) 174 Chapter 9. FAQ

181 ( 续上页 ) location /socket.io/ { proxy_pass # 如果 coco 安装在别的服务器, 请填写它的 ip proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /coco/ { proxy_pass # 如果 coco 安装在别的服务器, 请填写它的 ip 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 # 如果 guacamole 安装在别的服务器, 请填写它的 ip proxy_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; access_log off; client_max_body_size 100m; # Windows 文件上传大小限制 } }... location / { proxy_pass } # 如果 jumpserver 安装在别的服务器, 请填写它的 ip 21. 访问 luna 页面提示 Luna 是单独部署的一个程序, 你需要部署 luna, coco, 配置 nginx 做 url 分发... # 请通过 nginx 代理的端口访问 jumpserver 页面, 不要再直接访问 8080 端口 9.8 升级常见问题 请务必认真详细阅读每一个文字并理解后才能操作升级事宜 1. git pull 时提示 error: Your local changes to the following file would be overwritten by merge # 这是因为你修改了本地文件导致代码冲突, 请确认修改的内容并手动进行合并, 请谨慎处理 # 如果希望保留你的改动 $ git stash $ git pull $ git stash pop ( 下页继续 ) 9.8. 升级常见问题 175

182 # 可以使用 git diff -w + 文件名来确认代码自动合并的情况 ( 续上页 ) # 或者放弃本地的修改 $ git reset --hard $ git pull 2. sh make_migrations.sh 时提示 1064, "You have an error in your SQL syntax; check the manual than corresponds to your MySql server version for the right syntax to use near (6) NOT NULL " # 这是因为你的数据库版本不对, 从 1.4.x 版本开始 mysql 版本需要大于等于 5.6, mariadb 版本需要大于等于 # 请更换数据库重新操作 3. 数据库表结构不完整导致升级失败的, 按如下内容进行处理 # 一定要知道自己升级之前的版本, 在升级之前可以通过如下代码进行查询, 记住是升级之前, 也可以通过 web 页面的右下角来查看当前版本信息 $ cat /opt/jumpserver/apps/jumpserver/context_processor.py grep version $ cat /opt/jumpserver/apps/templates/_footer.html grep Version # 备份当前版本数据库, 忽略 django_migrations 表 $ mysqldump -uroot -p jumpserver --ignore-table=jumpserver.django_migrations > /opt/ jumpserver.sql # 重命名 Jumpserver 目录 $ mv /opt/jumpserver /opt/jumpserver_bak # 重新 clone 代码 $ cd /opt $ git clone $ cd jumpserver # 检出你之前的版本, 比如之前的版本是 $ git checkout # 表示版本号, 自己手动更换成你当前的版本, 如 则输入 git checkout # 依赖安装 $ source /opt/py3/bin/activate $ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) $ pip install -r /opt/jumpserver/requirements/requirements.txt # 重新创建一个数据库 $ mysql -uroot > create database jumpserver01 default charset 'utf8'; > grant all on jumpserver01.* to 'jumpserver01'@' ' identified by 'weakpassword'; > flush privileges; > quit # 修改配置文件 $ cp /opt/jumpserver_bak/config.py /opt/jumpserver/ $ vim /opt/jumpserver/config.py DB_ENGINE = 'mysql' DB_HOST = ' ' DB_PORT = 3306 DB_USER = 'jumpserver01' ( 下页继续 ) 176 Chapter 9. FAQ

183 DB_PASSWORD = 'weakpassword' DB_NAME = 'jumpserver01' ( 续上页 ) # 初始化数据库 $ cd /opt/jumpserver/utils $ sh make_migrations.sh # 确定初始化没有错误, 把旧的数据库导入 $ mysql -uroot > use jumpserver01; > source /opt/jumpserver.sql # 启动 jumpserver, 确定没有错误 $ cd /opt/jumpserver $./jms start all # 打开 web 页面检查是否都正常 $ 参考升级文档继续升级到最新版本即可 # 删除原数据库命令 ( 谨慎操作 ) $ mysql -uroot > drop database jumpserver; > quit 9.9 Firewalld 使用说明 1. 打开 firewalld $ systemctl start firewalld 2. 端口允许被某固定 IP 访问 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" 允许访问的 IP" port protocol="tcp" port=" 端口 " accept" $ firewall-cmd --reload # 重载规则, 才能生效 $ firewall-cmd --list-all # 查看使用中的规则 # 举例 # 允许 访问 6379 端口 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="6379" accept" # 允许 访问 3306 端口 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="3306" accept" # 允许 访问 8080 端口 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="8080" accept" $ firewall-cmd --reload # 重载规则, 才能生效 ( 下页继续 ) 9.9. Firewalld 使用说明 177

184 ( 续上页 ) # 删除规则 ( add 改成 remove ) $ firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="6379" accept" $ firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="3306" accept" $ firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" " port protocol="tcp" port="8080" accept" $ firewall-cmd --reload # 重载规则, 才能生效 3. 端口允许所有 IP 访问 $ firewall-cmd --zone=public --add-port= 端口 /tcp --permanent $ firewall-cmd --reload # 重载规则, 才能生效 $ firewall-cmd --list-all # 查看使用中的规则 # 举例 # 允许访问 2222 端口 $ firewall-cmd --zone=public --add-port=2222/tcp --permanent # 允许访问 8080 端口 $ firewall-cmd --zone=public --add-port=8080/tcp --permanent # 删除规则 ( add 改成 remove ) $ firewall-cmd --zone=public --remove-port=2222/tcp --permanent $ firewall-cmd --zone=public --remove-port=8080/tcp --permanent $ firewall-cmd --reload # 重载规则, 才能生效 9.10 RDP 协议资产连接说明 RDP 协议资产连接错误排查思路 (1). 如果白屏检查 nginx 配置文件的 guacamole 设置 ip 是否正确, 检查终端管理的 gua 状态是否在线 (2). 如果显示没有权限是你终端管理里 guacamole 状态为红色或者没有注册成功 (3). 如果显示未知问题可能是你的资产填写的端口不对, 或者授权的系统用户的协议不是 rdp (4). 提示无法连接服务器一般情况下是登录的系统账户不正确或者防火墙设置有误, 资产的信息填写不正确也会报这个错误 (5). 提示网络问题无法连接或者超时, 请检查网络连接并重试, 或联系管理员一般情况下网络有问题 1. 检查终端是否在线 178 Chapter 9. FAQ

185 # 如果终端不在线, 请检查 guacamole 的 BOOTSTRAP_TOKEN 是否与 jumpserver 一致, 如果不一致请修改后重启 $ cat /opt/jumpserver/config.yml grep BOOTSTRAP_TOKEN $ env grep BOOTSTRAP_TOKEN $ /etc/init.d/guacd stop $ sh /config/tomcat8/bin/shutdown.sh $ rm -rf /config/guacamole/keys/* $ /etc/init.d/guacd start $ sh /config/tomcat8/bin/startup.sh # docker 部署请直接删除容器后重建, 记得一定要先在终端管理删除不在线的组件 $ docker stop jms_guacamole $ docker rm jms_guacamole # 指向 jumpserver 的服务 url, 如 # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN $ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER= <Jumpserver_url> -e BOOTSTRAP_TOKEN=xxxxxx jumpserver/jms_guacamole: # 正常运行后到 Jumpserver 会话管理 - 终端管理里面查看 gua 的状态是否为绿色 ( 等待大概 5s 后刷新页面 ) 2. 登录要连接的 windows 资产, 检查远程设置和防火墙设置 # Windows 7/2008 勾选允许运行任意版本远程桌面的计算机连接 ( 较不安全 )(L) # Windows 8/10/2012 勾选允许远程连接到此计算机 (L) # Windows 防火墙 - 高级设置 - 入站规则把远程桌面开头的选项右键 - 启用规则 # Windows 7/2008 启用远程桌面 (TCP-In) # Windows 8/10/2012 启用远程桌面 - 用户模式 (TCP-In) RDP 协议资产连接说明 179

186 3. 登录要连接的 windows 资产, 检查用户和 IP 信息 (Windows 目前还不支持推送, 所以必须使用资产上面已存在的用户进行登录 ) # 注 : 因为 windows 暂时不支持推送, 所以必须使用资产上面已经存在的账户进行登录, 如 administrator 账户 180 Chapter 9. FAQ

187 4. 创建 Windows 资产管理用户 ( 如果是域资产, 格式是 uesr@domain.com) # 不带域的用户直接输入用户名即可, 如 administrator # 域用户的用户名格式为 user@domain.com, 如 administrator@jumpserver.org RDP 协议资产连接说明 181

188 5. 创建 Windows 资产系统用户 ( 如果是域资产, 格式是 uesr@domain.com, 注意协议不要选错 ) # 注 : 因为 windows 暂时不支持推送, 所以必须使用资产上面已经存在的账户进行登录, 如 administrator 账户 # 不带域的用户直接输入用户名即可, 如 administrator # 域用户的用户名格式为 user@domain.com, 如 administrator@jumpserver.org # 如果想让用户登录资产时自己输入资产的账户密码, 可以点击系统用户的名称点击清除认证信息 # 此处必须输入能正确登录 windows 资产的账户密码 # 如不确实是不是因为密码或者账户信息错误导致的无法登录, 可以使用手动登录功能 ( 在系统用户处设置 ) 182 Chapter 9. FAQ

189 6. 创建 Windows 资产 ( 注意端口不要填错 ) # Windows 7/8/2008/2012 " 系统平台 " 选择 "Windows" # Windows 10/2016 " 系统平台 " 选择 "Windows(2016)" RDP 协议资产连接说明 183

190 7. 创建授权规则 # 先定位到 windows 的资产, 然后授权, 如果资产用户密码不一致, 请不要直接在节点上授权 184 Chapter 9. FAQ

191 8. 使用 web terminal 登录 ( 如果登录报错, 检查防火墙的设置, 可以参考 FAQ) RDP 协议资产连接说明 185

192 9. Windows 资产文件上传和下载 # 直接拖拽文件到 windows 窗口即可, 文件上传后在 Guacamole RDP 上的 G 目录查看 # 下载在 luna 页面, 按 ctrl+alt+shift, 选择文件下载即可 186 Chapter 9. FAQ

193 其他问题可参考 FAQ 9.11 SSH 协议资产连接说明 SSH 协议资产连接错误排查思路 (1). 检查管理用户的权限是否正确, 权限需要与 root 权限一致 (2). 检查资产的防火墙策略, 可以在资产上面新建个用户, 尝试用此用户在 jumpserver 服务器上进行 ssh 连接 (3). 检查资产的 ssh 策略, 确保可以被 jumpserver 应用访问 1. 检查终端是否在线 SSH 协议资产连接说明 187

194 # 如果不在线请检查 coco 的 BOOTSTRAP_TOKEN 是否与 jumpserver 一致, 如果不一致请修改后重启 # 在终端管理删除不在线的组件 $ cat /opt/jumpserver/config.yml grep BOOTSTRAP_TOKEN $ cat /opt/coco/config.yml grep BOOTSTRAP_TOKEN $ cd /opt/coco &&./cocod stop $ rm /opt/coco/data/keys/.access_key # coco, 如果你是按文档安装的, key 应该在这里, 如果不存在, 直接下一步 $./cocod start -d # docker 部署请直接删除容器后重建, 记得一定要先在终端管理删除不在线的组件 $ docker stop jms_coco $ docker rm jms_coco # 指向 jumpserver 的服务 url, 如 # BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN $ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST= <Jumpserver_url> -e BOOTSTRAP_TOKEN=xxxxxx jumpserver/jms_coco: # 正常运行后到 Jumpserver 会话管理 - 终端管理里面查看 coco 的状态是否为绿色 2. 访问 luna 界面不显示资产信息 # 确定已经授权资产给当前登录用户 # 确定 Jumpserver 的版本与 luna 的版本一致, 如不一致请参考升级文档进行处理 # Jumpserver 版本可在 jumpserver 页面右下角看到 # Luna 版本可在 luna 页面左下角看到 # 注 : 更新后请清理浏览器缓存后再访问 188 Chapter 9. FAQ

195 3. 访问 Linux 资产无任何提示 # 请参考第一条检查终端是否在线 # 检查 coco 的 ws 端口 ( 默认 5000) # 检查 nginx 配置的 socket.io 设置是否有误 # 正常部署的 coco 组件请使用如下命令 $ cd /opt/coco $ source /opt/py3/bin/activate $./cocod stop $ ps -ef grep cocod awk '{print $2}' xargs kill -9 $./cocod start # docker 容器部署的 coco 组件请检查防火墙是否无误, 重启容器即可 $ docker restart jms_coco 4. 登录资产提示 Authentication failed # 请检查推送或系统用户是否正确, 可以把系统用户设置成手动登录测试 # 在资产管理 - 系统用户下, 点击相应的系统用户名称可以看到系统用户详情, 右边可以测试 SSH 协议资产连接说明 189

196 5. 测试可连接性及更新硬件信息 # 注意不要拦截窗口 190 Chapter 9. FAQ

197 6. 管理用户测试可连接性 # 注意不要拦截窗口 SSH 协议资产连接说明 191

198 7. 系统用户推送测试资产可连接性 # 注意不要拦截窗口 192 Chapter 9. FAQ

199 8. ssh 使用 key 登录资产提示所选的用户密钥未在远程主机上注册 # 这里是信息填写错误, ip 端口应该填 coco 服务器的 ip, 端口应该填 coco 服务的 ssh 端口 ( 默认 2222) 9. 清理 celery 产生的数据 ( 无法正常推送及连接资产, 一直显示... 等可以使用, 请确定字符集是 zh_cn.utf-8) $ source /opt/py3/bin/activate $ cd /opt/jumpserver/apps $ celery -A ops purge -f # 如果任然异常, 手动结束所有 jumpserver 进程, 然后 kill 掉未能正常结束的 jumpserver 相关进程, 在重新启动 jumpserver 即可 10. 连接测试常见错误 # 提示 Authentication failure # 一般都是资产的管理用户不正确 # 提示 Failed to connect to the host via ssh: ssh_exchange_identification: read: Connection reset by peer\r\n # 一般是资产的 ssh 或者防火墙做了限制, 无法连接资产 ( 资产信息填错也可能会报这个错误 ) # 检查防火墙设置以及 /etc/hosts.allow /etc/hosts.deny ( 下页继续 ) SSH 协议资产连接说明 193

安装 nginx 添加 nginx 源 命令 :rpm -ivh gx.noarch.rpm 安装 nginx 命令 :yum install

安装 nginx 添加 nginx 源 命令 :rpm -ivh   gx.noarch.rpm 安装 nginx 命令 :yum install 安装 nginx 添加 nginx 源 命令 :rpm -ivh http://nginx.org/packages/centos/7/noarch/rpms/nginx-release-centos-7-0.el7.n gx.noarch.rpm 安装 nginx 命令 :yum install -y nginx 启动 nginx 命令 :systemctl start nginx.service

More information

安装 Nginx 命令 :yum install -y nginx 接着将 Nginx 设置为开机启动, 输入命令 :chkconfig nginx on Web 默认根目录为 :/usr/share/nginx/html/ 开放 80 端口 :iptables -I INPUT -p tcp --

安装 Nginx 命令 :yum install -y nginx 接着将 Nginx 设置为开机启动, 输入命令 :chkconfig nginx on Web 默认根目录为 :/usr/share/nginx/html/ 开放 80 端口 :iptables -I INPUT -p tcp -- 安装 Nginx 命令 :yum install -y nginx 接着将 Nginx 设置为开机启动, 输入命令 :chkconfig nginx on Web 默认根目录为 :/usr/share/nginx/html/ 开放 80 端口 :iptables -I INPUT -p tcp --dport 80 -j ACCEPT 保存设置 :service iptables save 重启防火墙

More information

Microsoft PowerPoint - 03.IPv6_Linux.ppt [相容模式]

Microsoft PowerPoint - 03.IPv6_Linux.ppt [相容模式] IPv6 Linux (Cent OS 5.x) IPV6 2 IPv6 IPv6 IPv6 IPv6 IPv4 IPv6 (RFC 2460) Dual Stack Tunnel 3 4 IPv6 Native IP IPv6, DHCPv6 IPv6 IP IPv6 Tunnel Broker IPv4, Tunnel IPv6 Tunnel Broker Client IPv6 ( ) IPv6

More information

无车承运人平台 ( 标准版 ) 部署手册 上海达牛信息技术有限公司 Niu Infomation Technology Co.,Ltd.

无车承运人平台 ( 标准版 ) 部署手册 上海达牛信息技术有限公司 Niu Infomation Technology Co.,Ltd. 无车承运人平台 ( 标准版 ) 部署手册 上海达牛信息技术有限公司 Niu Infomation Technology Co.,Ltd. http://www.niuinfo.com 目录 1 准备工作... 4 1.1 应用运行环境介绍... 4 1.2 采购阿里云服务... 4 1.3 获取标准版应用程序包... 5 1.4 用到的辅助工具... 5 1.4.1 Navicat for MySQL...

More information

快 速 入 门 (Linux) 概 述 文 档 目 的 本 文 档 介 绍 了 如 何 快 速 创 建 Linux 系 统 实 例 远 程 连 接 实 例 部 署 环 境 等 旨 在 引 导 您 一 站 式 完 成 实 例 的 创 建 登 录 和 快 速 环 境 部 署 云 服 务 器 ECS 实

快 速 入 门 (Linux) 概 述 文 档 目 的 本 文 档 介 绍 了 如 何 快 速 创 建 Linux 系 统 实 例 远 程 连 接 实 例 部 署 环 境 等 旨 在 引 导 您 一 站 式 完 成 实 例 的 创 建 登 录 和 快 速 环 境 部 署 云 服 务 器 ECS 实 云 服 务 器 ECS 快 速 入 门 (Linux) 快 速 入 门 (Linux) 概 述 文 档 目 的 本 文 档 介 绍 了 如 何 快 速 创 建 Linux 系 统 实 例 远 程 连 接 实 例 部 署 环 境 等 旨 在 引 导 您 一 站 式 完 成 实 例 的 创 建 登 录 和 快 速 环 境 部 署 云 服 务 器 ECS 实 例, 有 时 候 也 被 称 为 阿 里 云

More information

投影片 1

投影片 1 FreeBSD A 95/10/11 19:00~21:00 95/10/11 FreeBSD 練 1 Services Setup SSH, lighttpd, PHP, MySQL, FTP, Postfix, phpmyadmin, Blog, Gallery 95/10/11 FreeBSD 練 2 1. 2. # FreeBSD # 3. vi ee joe nano etc 95/10/11

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

A9RF716.tmp

A9RF716.tmp 1 PART I 1 2 3 4 5 6 7 8 Docker Docker Image Container Repository Docker le Docker Docker 8 1 Docker Linux 2 Docker Docker 3 5 Docker 6 Docker volume 7 8 Docker le Docker le 1 C H A P T E R 1 CPU Data

More information

本文由筱驀釹贡献

本文由筱驀釹贡献 本 文 由 筱 驀 釹 贡 献 ppt 文 档 可 能 在 WAP 端 浏 览 体 验 不 佳 建 议 您 优 先 选 择 TXT, 或 下 载 源 文 件 到 本 机 查 看 Linux 操 作 系 统 Linux 操 作 系 统 第 一 部 分 介 绍 与 安 装 Linux 的 由 来 : Linux 的 由 来 : 的 由 来 Linus Torvalds 1.Linux 的 版 本 1.Linux

More information

简易 Linux Server 部署教程系列之 06 使用 Samba 实现文件共享服务 ( 作者信息 : 阮晓龙投稿时间 :2018 年 5 月 4 日 ) 一 需求描述 1 需求说明支持 Windows Linux Unix Mac 等操作系统支持 Android ios 等移动平台支持计算机

简易 Linux Server 部署教程系列之 06 使用 Samba 实现文件共享服务 ( 作者信息 : 阮晓龙投稿时间 :2018 年 5 月 4 日 ) 一 需求描述 1 需求说明支持 Windows Linux Unix Mac 等操作系统支持 Android ios 等移动平台支持计算机 简易 Linux Server 部署教程系列之 06 使用 Samba 实现文件共享服务 ( 作者信息 : 阮晓龙投稿时间 :2018 年 5 月 4 日 ) 一 需求描述 1 需求说明支持 Windows Linux Unix Mac 等操作系统支持 Android ios 等移动平台支持计算机 平板电脑 智能手机 智能电视全终端体系支持多账号 多共享目录, 以及交叉授权 2 部署要求 基于 CentOS

More information

Linux Ubuntu Part Linux Ubuntu Linux UNIX...19 Linux...19 Linux Linux...21 Linux GNU FSF Open So urce.

Linux Ubuntu Part Linux Ubuntu Linux UNIX...19 Linux...19 Linux Linux...21 Linux GNU FSF Open So urce. Linux Ubuntu 10.04 Part 1 17 1 Linux Ubuntu... 18 1-1 Linux... 19 UNIX...19 Linux...19 Linux...20...20 Linux...21 Linux...21 1-2 GNU FSF Open So urce...22 GNU...22 GPL...23...24 1-3 GNU/Linux V.S. Linux...25

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Linux 操 作 系 统 基 础 介 绍 课 程 目 标 及 要 求 了 解 Linux 操 作 系 统 的 登 入 方 式 掌 握 常 用 命 令 的 基 本 用 法 能 够 熟 练 在 各 个 目 录 转 换 Outline 1. Linux 操 作 系 统 简 介 2. Linux 操 作 系 统 的 登 录 3. Linux 操 作 系 统 的 目 录 结 构 4. 常 用 命 令 5.

More information

untitled

untitled 年度 路 IVI 劉 隆 年 597 598 IVI 錄... 601 行... 601... 601 1.... 601 2. 路... 602 3.... 603... 604 1.IPv4 to IPv6... 604 2.IPv6 to IPv4... 605 -... 606 ( )IVI Server... 606 ( )IVI Server... 610 ( )IVI DNS Server...

More information

スライド 1

スライド 1 LPIC 304 2014 7 27 ( ) 13:30 16:30 LPI-Japan LPI-Japan 2009. All rights reserved. LPI-Japan 2009. All rights reserved. 2 Linux Linus Torvalds Carl ) in LinuxConJapan http://www.lpi.or.jp/news/event/page/20130529_02_report/

More information

1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT

1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT 1 IT IT IT IT Virtual Machine, VM VM VM VM Operating Systems, OS IT Chapter 1 了解虛擬化技術種類 硬體 / 平台 / 伺服器虛擬化 VM VM VM CPU Hypervisor VMM Virtual Machine Manager VM Host OS VM VM Guest OS Host OS CPU VM Hyper-V

More information

untitled

untitled V3049A-EXD IP-SAN/NAS Infinova Infinova Infinova Infinova www.infinova.com.cn Infinova Infinova Infinova 1 2 1 2 V3049A-EXD-R16 V3049A-EXD-R24 ... 1 1.1... 1 1.2... 1 1.3... 1... 2 2.1... 2 2.2... 3...

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

untitled

untitled V3041A-J/V3042A-J IP-SAN/NAS Infinova Infinova Infinova Infinova www.infinova.com.cn Infinova Infinova Infinova 1 2 1 2 V3041A-16R-J V3041A-24R-J V3042A-16R-J V3042A-24R-J V3049-EXD-R16 V3049-EXD-R24 ...

More information

Microsoft Word - linux命令及建议.doc

Microsoft Word - linux命令及建议.doc Linux 操 作 系 统 命 令 集 1 基 本 命 令 查 看 系 统 信 息 : uname -a 修 改 密 码 : passwd 退 出 : logout(exit) 获 取 帮 助 : man commands 2 文 件 和 目 录 命 令 显 示 当 前 工 作 目 录 : pwd 改 变 所 在 目 录 : cd cd - 切 换 到 上 一 次 使 用 的 目 录 cd 切 换

More information

スライド 1

スライド 1 LPIC 304 2015 1 18 ( ) 13:30 16:30 LPI-Japan LPI-Japan 2009. All rights reserved. LPI-Japan 2009. All rights reserved. 2 Linux Linus Torvalds Carl ) in LinuxConJapan nginx Igor Sysoev in Nginx LPI-Japan

More information

Microsoft Word - PS2_linux_guide_cn.doc

Microsoft Word - PS2_linux_guide_cn.doc Linux For $ONY PlayStatioin2 Unofficall General Guide Language: Simplified Chinese First Write By Beter Hans v0.1 Mail: hansb@citiz.net Version: 0.1 本 人 是 菜 鸟 + 小 白 欢 迎 指 正 错 误 之 处, 如 果 您 有 其 他 使 用 心 得

More information

.. 3 N

.. 3 N 1 .. 3 N9.. 4 5.. 6 7.. 8 20.. 21 23.. 24.. 25 26.. 27.. 28.. 29 2 (Cyber Café) Linux (LAN) Linux Public Home 3 K12LTSP K12LTSPFedora Core 4 (Linux)LTSP Linux (command line interface) (Graphical User Interface,

More information

untitled

untitled Parent zone named.conf.options ( Root) shell script shell script 2 Child zone named.conf.options ( ) ( ) ( ) ( ) ( ) ( parent zone) 3 Parent zone named.conf.options $ vi /etc/bind/named.conf.options options

More information

lect03.ppt

lect03.ppt Linux 操 作 系 统 Linux 基 础 主 要 内 容 q 使 用 Linux q Linux 的 两 种 登 录 方 式 q 字 符 操 作 环 境 和 X Windows 系 统 q Linux 图 形 界 面 基 本 操 作 q Linux 命 令 的 使 用 方 式 q Linux 一 些 常 用 命 令 1 2 一 些 基 本 术 语 u 命 令 (Command) 给 计 算 机

More information

untitled

untitled MySQL DBMS under Win32 Editor: Jung Yi Lin, Database Lab, CS, NCTU, 2005/09/16 MySQL 料 理 MySQL 兩 Commercial License 利 GPL MySQL http://www.mysql.com Developer Zone http://www.mysql.com Download 連 連 MySQL

More information

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc 在 VMWare-5.5+RedHat-9 下建立 本机 QTopia-2.1.1 虚拟平台 张大海 2008-5-9 一 资源下载 1. 需要以下安装包 : tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz

More information

ebook140-9

ebook140-9 9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I

More information

OpenStack Nova安装说明

OpenStack Nova安装说明 OpenStack 完整安装手册 (all-in-one) CentOS 6.x 基于 RPM 包 作者 : yz 联系方式 : QQ: 949587200 日期 : 2012-7-18 版本 : Essex Release 目录 实验环境... 4 架构部署... 4 服务器系统安装... 5 安装... 5 前提工作... 5 NTP 时钟服务安装... 5 MYSQL 数据库服务安装... 6

More information

Linux服务器构建与运维管理

Linux服务器构建与运维管理 1 Linux 服务器构建与运维管理 第 2 章 :Linux 基本命令 阮晓龙 13938213680 / rxl@hactcm.edu.cn http://linux.xg.hactcm.edu.cn http://www.51xueweb.cn 河南中医药大学管理科学与工程学科 2018.3 2 提纲 目录与文件的操作 mkdir touch mv cp rm rmdir file tree

More information

LTM Management Console

LTM Management Console Lenovo Thin Client Manager 用 户 手 册 注 释 警 示 及 警 告 注 释 : 一 条 注 释 是 用 来 说 明 重 要 的 信 息, 帮 助 您 更 好 地 使 用 计 算 机 警 示 : 一 个 警 示 是 用 来 指 出, 如 果 不 依 照 说 明 操 作, 则 可 能 损 坏 硬 件 或 丢 失 数 据 本 出 版 物 中 的 信 息 如 有 更 改, 恕

More information

像 客 样 使 命令行 徐 东

像 客 样 使 命令行 徐 东 像 客 样 使 命令行 徐 东 1 1.1................................ 1 1.2................................. 3 1.3............................. 4 1.3.1 Linux............................ 5 1.3.2 macos............................

More information

AL-M200 Series

AL-M200 Series NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel

More information

ebook140-8

ebook140-8 8 Microsoft VPN Windows NT 4 V P N Windows 98 Client 7 Vintage Air V P N 7 Wi n d o w s NT V P N 7 VPN ( ) 7 Novell NetWare VPN 8.1 PPTP NT4 VPN Q 154091 M i c r o s o f t Windows NT RAS [ ] Windows NT4

More information

05_資源分享-NFS及NIS.doc

05_資源分享-NFS及NIS.doc 5 NFS NFS Server NFS Client NIS NIS 5-0 (Network File System, NFS) Unix NFS mount NFS... Network Information Service NIS Linux NIS NIS NIS / / /etc/passwd /etc/group NFS NIS 5-1 NFS 5-1-1 NFS NFS Network

More information

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0 SDChain-Matrix 节点搭建指南 目录 1 环境要求... 3 2 软件下载... 4 3 安装部署... 4 3.1 部署可执行程序目录... 4 3.2 部署配置文件目录... 4 3.3 部署数据库文件目录... 4 3.4 部署日志文件目录... 4 3.5 部署依赖库文件目录... 4 4 配置参数... 5 5 启动运行... 7 5.1 普通模式启动... 7 5.2 加载启动模式...

More information

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南 Symantec Sygate Enterprise Protection 防 护 代 理 安 装 使 用 指 南 5.1 版 版 权 信 息 Copyright 2005 Symantec Corporation. 2005 年 Symantec Corporation 版 权 所 有 All rights reserved. 保 留 所 有 权 利 Symantec Symantec 徽 标 Sygate

More information

1

1 DOCUMENTATION FOR FAW-VW Auto Co., Ltd. Sales & Service Architecture Concept () () Version 1.0.0.1 Documentation FAW-VW 1 61 1...4 1.1...4 2...4 3...4 3.1...4 3.2...5 3.3...5 4...5 4.1 IP...5 4.2 DNSDNS...6

More information

Microsoft Word - 新正文.doc

Microsoft Word - 新正文.doc CentOS 6.4 CentOS Linux 1-1 1-1 Esc Anaconda 1-1 Anaconda 1-1 Anaconda text resolution=m N lowres askmethod ks=params X M N M N 1024 768 640 480 CD Kickstart Kickstart 2 Linux mediacheck noprobe rescue

More information

VIDEOJET connect 7000 VJC-7000-90 zh- CHS Operation Manual VIDEOJET connect 7000 zh-chs 3 目 录 1 浏 览 器 连 接 7 1.1 系 统 要 求 7 1.2 建 立 连 接 7 1.2.1 摄 像 机 中 的 密 码 保 护 7 1.3 受 保 护 的 网 络 7 2 系 统 概 述 8 2.1 实 况

More information

ch08.PDF

ch08.PDF 8-1 CCNA 8.1 CLI 8.1.1 8-2 8-3 8.1.21600 2500 1600 2500 / IOS 8-4 8.2 8.2.1 A 5 IP CLI 1600 2500 8-5 8.1.2-15 Windows 9598NT 2000 HyperTerminal Hilgraeve Microsoft Cisco HyperTerminal Private Edition (PE)

More information

投影片 1

投影片 1 類 Linux BASH shell (, VBird) 2008/03/29 Linux 1 Bash Shell 令 vi vim 料流 令 / 令 理 (job control) 例 2008/03/29 Linux 2 Bash shell 2008/03/29 Linux 3 什 Shell Shell shell 2008/03/29 Linux 4 什 Shell Linux shell

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

網路安全:理論與實務 第二版

網路安全:理論與實務 第二版 第 10 章 :Wireshark 封 包 分 析 軟 體 10-1 Wireshark 簡 介 10-2 Wireshark 的 安 裝 方 法 10-3 Wireshark 的 使 用 Wireshark 簡 介 - 發 展 歷 史 Wireshark (http://www.wireshark.org/) 是 一 個 開 放 原 始 碼 (open source software) 軟 體,

More information

Abstract arm linux tool-chain root NET-Start! 2

Abstract arm linux tool-chain root NET-Start! 2 Lab III - Embedding Linux 1 Abstract arm linux tool-chain root NET-Start! 2 Part 1.4 Step1. tool-chain 4 Step2. PATH 4 Part 2 kernel 5 Step1. 5 Step2... 6 Step3...8 Part 3 root. 8 Step1. 8 Step2. 8 Part

More information

常 见 问 题 SLB 产 品 和 业 务 限 制 SLB 产 品 限 制 SLB 产 品 和 业 务 限 制 限 制 项 普 通 用 户 限 制 描 述 例 外 申 请 方 式 ( 例 外 上 限 ) 创 建 SLB 实 例 的 财 务 限 制 账 户 余 额 大 于 等 于 100 元 现 金

常 见 问 题 SLB 产 品 和 业 务 限 制 SLB 产 品 限 制 SLB 产 品 和 业 务 限 制 限 制 项 普 通 用 户 限 制 描 述 例 外 申 请 方 式 ( 例 外 上 限 ) 创 建 SLB 实 例 的 财 务 限 制 账 户 余 额 大 于 等 于 100 元 现 金 负 载 均 衡 SLB 常 见 问 题 常 见 问 题 SLB 产 品 和 业 务 限 制 SLB 产 品 限 制 SLB 产 品 和 业 务 限 制 限 制 项 普 通 用 户 限 制 描 述 例 外 申 请 方 式 ( 例 外 上 限 ) 创 建 SLB 实 例 的 财 务 限 制 账 户 余 额 大 于 等 于 100 元 现 金 工 单 创 建 SLB 实 例 的 用 户 限 制 创 建 SLB

More information

puppet 简介 3 puppet 是什么 3 Hello world 4 puppet 安装 5 debian 系发行版安装 puppet 5 redhat 系发行版安装 puppet 5 源代码安装 puppet 6 配置 c/s 模式的 puppet 试验环境 6 puppet 语法 8 资

puppet 简介 3 puppet 是什么 3 Hello world 4 puppet 安装 5 debian 系发行版安装 puppet 5 redhat 系发行版安装 puppet 5 源代码安装 puppet 6 配置 c/s 模式的 puppet 试验环境 6 puppet 语法 8 资 puppet 入门 puppet 简介 3 puppet 是什么 3 Hello world 4 puppet 安装 5 debian 系发行版安装 puppet 5 redhat 系发行版安装 puppet 5 源代码安装 puppet 6 配置 c/s 模式的 puppet 试验环境 6 puppet 语法 8 资源 8 类和函数 10 节点 11 变量和数组 12 模块 13 几个常用的资源

More information

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30 0 配置 Host MIB 设备 V 1.1.2 ( 简体版 ) 0 Update: 2016/1/30 前言 N-Reporter 支持 Host Resource MIB 监控主机 (Host) 状态, 本文件描述 N-Reporter 用户如何配置 Host MIB 设备 文件章节如下 : 1. 配置 Windows Server 2003... 2 1-1.Windows Server 2003

More information

ebook62-1

ebook62-1 1 Red Hat Linux R e d Hat Linux L i n u x X Wi n d o w Red Hat L i n u x 1.1 Red Hat Linux Red Hat 16 M 120 M 3. 5 Intel 386 C D - R O M C D - R O M We b / 1.1.1 L i n u x L i n u 4 Primary Partition Extended

More information

Basic System Administration

Basic System Administration 基 本 系 统 管 理 ESX Server 3.5 ESX Server 3i 版 本 3.5 Virtual Center 2.5 基 本 管 理 指 南 基 本 管 理 指 南 修 订 时 间 :20080410 项 目 :VI-CHS-Q208-490 我 们 的 网 站 提 供 最 新 的 技 术 文 档, 网 址 为 : http://www.vmware.com/cn/support/

More information

05 01 X Window X Window Linux Linux X Window X Window Webmin Web Linux Linux X Window X Window Notebook PC X Window X Window module Linux Linux kernel

05 01 X Window X Window Linux Linux X Window X Window Webmin Web Linux Linux X Window X Window Notebook PC X Window X Window module Linux Linux kernel Linux sub bash test2.sh sub bash test.sh test2.sh sub bash var1 123 123 test.sh test2.sh var1 bash sub bash var1 bash 01 5-4 X Window X Window X Window Linux Server X Window CPU2006 Linux X Window benchmark

More information

投影片 1

投影片 1 類 Linux 理 理 理 (, VBird) 2008/03/31 Linux 理 1 錄 Tarball Linux distributions / 例 2008/03/31 Linux 理 2 錄 2008/03/31 Linux 理 3 錄 錄 錄 錄 ( samba, xinetd ) ( libpam..) 料 錄 令 syslogd logrotate 行 錄 輪 令 2008/03/31

More information

目 錄 第 一 章 weberp 簡 介... 6 第 一 節 概 述... 6 第 二 節 安 全 性... 7 第 三 節 功 能... 7 一 銷 售 及 訂 單... 7 二 稅... 8 三 應 收 帳 款... 8 四 存 貨... 8 五 購 買... 9 六 應 付 帳 款... 9

目 錄 第 一 章 weberp 簡 介... 6 第 一 節 概 述... 6 第 二 節 安 全 性... 7 第 三 節 功 能... 7 一 銷 售 及 訂 單... 7 二 稅... 8 三 應 收 帳 款... 8 四 存 貨... 8 五 購 買... 9 六 應 付 帳 款... 9 東 吳 大 學 企 研 所 資 訊 管 理 期 末 報 告 weberp 使 用 說 明 書 指 導 教 授 : 尚 榮 安 教 授 第 一 組 童 偉 哲 01353025 劉 彥 澧 01353028 史 璦 禎 01353031 吳 采 紋 98153143 1 目 錄 第 一 章 weberp 簡 介... 6 第 一 節 概 述... 6 第 二 節 安 全 性... 7 第 三 節 功

More information

ebook 185-6

ebook 185-6 6 Red Hat Linux DB2 Universal Database 6.1 D B 2 Red Hat D B 2 Control Center D B 2 D B 2 D B 2 6.1 DB2 Universal Database [DB2]6.1 D B 2 O LT P O L A P D B 2 I B M P C We e k D B 2 D B 2 L i n u x Windows

More information

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1 科 技 部 自 由 軟 體 專 案 原 始 程 式 碼 使 用 手 冊 Source Code Manual of NSC Open Source Project 可 信 賴 的 App 安 全 應 用 框 架 -App 應 用 服 務 可 移 轉 性 驗 證 Trusted App Framework -Transferability Verification on App MOST 102-2218-E-011-012

More information

资源管理软件TORQUE与作业调度软件Maui的安装、设置及使用

资源管理软件TORQUE与作业调度软件Maui的安装、设置及使用 TORQUE Maui hmli@ustc.edu.cn 2008 1 1 TORQUE 2 1.1 TORQUE........................... 2 1.2 TORQUE...................... 2 1.3 TORQUE.......................... 4 1.4 TORQUE........................... 4

More information

untitled

untitled 年度 路 GSN IPv6 年 749 750 說 (Dual Stack) 路 IPv4 IPv6 路 (DNS/WWW Server) 路 CISCO 路 例來 說 列 令 (DNS/WWW Server) FreeBSD 來說 BIND apache Server 來 DNS WWW Server 了 料 數 了 IPv4 路 IPv6 更 利 751 752 錄 錄 錄 錄 論 路 說 路

More information

epub 61-2

epub 61-2 2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +

More information

PowerPoint Presentation

PowerPoint Presentation 2014/12/18 19:30 开讲, 票价 200 报名后加 QQ 群 364994337 Odoo 部署 jeffery9@gmail.com 预告 Q:913547235 其他主题, 敬请期待 Odoo 安装与部署 [Linux] Odoo 消息与邮件 Odoo Security Odoo 自动化 CRM 客户关系管理 销售管理 采购管理 库存管理 会计与财务 生产管理 补货 HR 人力资源管理

More information

HOL-CHG-1695

HOL-CHG-1695 Table of Contents 练 习 概 述 - - vsphere 挑 战 练 习... 2 练 习 指 导... 3 第 1 单 元 : 在 实 践 中 学 习 (15 分 钟 )... 5 剪 贴 板 复 制 和 粘 贴 功 能 无 法 使 用?... 6 虚 拟 机 性 能 不 佳... 17 第 2 单 元 : 基 本 运 维 挑 战 (30 分 钟 )... 32 无 法 登 录

More information

f2.eps

f2.eps 前 言, 目 录 产 品 概 况 1 SICAM PAS SICAM 电 力 自 动 化 系 统 配 置 和 使 用 说 明 配 置 2 操 作 3 实 时 数 据 4 人 机 界 面 5 SINAUT LSA 转 换 器 6 状 态 与 控 制 信 息 A 版 本 号 : 08.03.05 附 录, 索 引 安 全 标 识 由 于 对 设 备 的 特 殊 操 作 往 往 需 要 一 些 特 殊 的

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

《计算机导论》实验教学大纲

《计算机导论》实验教学大纲 计 算 机 科 学 与 技 术 专 业 实 验 教 学 大 纲 福 建 师 范 大 学 数 学 与 计 算 机 科 学 学 院 2012 年 6 月 目 录 1. 计 算 机 导 论 教 学 大 纲... 3 2. 高 级 语 言 程 序 设 计 教 学 大 纲...5 3. 数 据 结 构 教 学 大 纲... 8 4. 算 法 设 计 与 分 析 ( 计 本 ) 教 学 大 纲...10 5.

More information

Linux 操作系统课程社区创作

Linux 操作系统课程社区创作 学 号 14284060xx 等 第 苏 州 大 学 实 验 报 告 Linux 操 作 系 统 课 程 社 区 创 作 院 ( 系 ) 名 称 : 电 子 信 息 学 院 专 业 名 称 : 14 通 信 工 程 ( 嵌 入 式 培 养 ) 学 生 姓 名 : 某 某 某 课 程 名 称 : Linux 操 作 系 统 2015-2016 学 年 第 一 学 期 1 摘 要 这 是 摘 要 主 要

More information

Windows 2000 Server for T100

Windows 2000 Server for T100 2 1 Windows 95/98 Windows 2000 3.5 Windows NT Server 4.0 2 Windows DOS 3.5 T200 2002 RAID RAID RAID 5.1 Windows 2000 Server T200 2002 Windows 2000 Server Windows 2000 Server Windows 2000 Server 3.5 for

More information

Microsoft Word - template.doc

Microsoft Word - template.doc HGC efax Service User Guide I. Getting Started Page 1 II. Fax Forward Page 2 4 III. Web Viewing Page 5 7 IV. General Management Page 8 12 V. Help Desk Page 13 VI. Logout Page 13 Page 0 I. Getting Started

More information

开源软件DSpace的安装和维护(清华_邹荣).ppt

开源软件DSpace的安装和维护(清华_邹荣).ppt 开源软件 DSpace 的安装和维护 清华大学图书馆邹荣 2009 年 9 月 DSpace 的安装 dspace-1.5.2 硬件平台主流 PC 服务器或 UNIX/Linux 服务器, 具体配置可以根据数据规模 保存 备份 性能等方面需求配置 操作系统 UNIX-like OS (Linux, HP/UX etc) Microsoft Windows ( 本馆采用的操作系统是 Linux centos

More information

PowerPoint Presentation

PowerPoint Presentation 立 97 年度 SNMG 練 DNS & BIND enc1215@gmail.com DNS BIND Resolver Named 理 Named 更 DNS DNS Reference 2 DNS DNS 料 domain ip DNS server DNS server 理 DNS server DNS DNS 狀. root name server 理 3 DNS 狀 DNS (2). com

More information

一 Grass 是 什 么 1 简 介 GRASS (Geographic Resources Analysis Support System, 地 理 资 源 分 析 支 持 系 统 ) 是 最 负 盛 名 的 开 源 地 理 信 息 系 统 (GIS) 以 下 是 它 的 一 些 特 点 : 1

一 Grass 是 什 么 1 简 介 GRASS (Geographic Resources Analysis Support System, 地 理 资 源 分 析 支 持 系 统 ) 是 最 负 盛 名 的 开 源 地 理 信 息 系 统 (GIS) 以 下 是 它 的 一 些 特 点 : 1 GRASS 中 文 教 程 作 者 : 广 东 省 东 莞 市 长 安 中 学 文 合 平 E_mail: wenheping@gmail.com 2007 年 9 月 1 一 Grass 是 什 么 1 简 介 GRASS (Geographic Resources Analysis Support System, 地 理 资 源 分 析 支 持 系 统 ) 是 最 负 盛 名 的 开 源 地 理

More information

AL-MX200 Series

AL-MX200 Series PostScript Level3 Compatible NPD4760-00 TC Seiko Epson Corporation Seiko Epson Corporation ( ) Seiko Epson Corporation Seiko Epson Corporation Epson Seiko Epson Corporation Apple Bonjour ColorSync Macintosh

More information

SiteView技术白皮书

SiteView技术白皮书 SiteView ECC V6.2 技 术 白 皮 书 游 龙 网 络 科 技 ( 中 国 ) 有 限 公 司 DragonFlow Networks(China),Inc. 目 录 第 一 章 产 品 概 述... 3 第 二 章 系 统 结 构... 6 一 系 统 架 构... 7 1 用 户 管 理 模 块... 7 2 Web Server... 8 3 存 储 加 密 模 块... 8

More information

http://panweizeng.com http://meituan.com http://meituan.com hosts http://meituan.com hosts localhost 127.0.0.1 /etc/nsswitch.conf /etc/hosts /etc/resolv.conf Mail Client Web Browser cache 1-30mins Clients

More information

软件测试(TA07)第一学期考试

软件测试(TA07)第一学期考试 一 判 断 题 ( 每 题 1 分, 正 确 的, 错 误 的,20 道 ) 1. 软 件 测 试 按 照 测 试 过 程 分 类 为 黑 盒 白 盒 测 试 ( ) 2. 在 设 计 测 试 用 例 时, 应 包 括 合 理 的 输 入 条 件 和 不 合 理 的 输 入 条 件 ( ) 3. 集 成 测 试 计 划 在 需 求 分 析 阶 段 末 提 交 ( ) 4. 单 元 测 试 属 于 动

More information

前言 本篇文档是 Kubernetes 1.13 单节点模式搭建文档, 采用 kubeadm 方式安装 Kubernetes 版本发行查阅地址 : 欢迎加入 K8S 高级运维技术交流群 QQ 群号 :3

前言 本篇文档是 Kubernetes 1.13 单节点模式搭建文档, 采用 kubeadm 方式安装 Kubernetes 版本发行查阅地址 :  欢迎加入 K8S 高级运维技术交流群 QQ 群号 :3 前言 本篇文档是 Kubernetes 1.13 单节点模式搭建文档, 采用 kubeadm 方式安装 Kubernetes 版本发行查阅地址 :https://github.com/kubernetes/kubernetes/releases 欢迎加入 K8S 高级运维技术交流群 QQ 群号 :344256452 一 实践环境准备 1. 服务器虚拟机准备 IP 地址节点角色 CPU Memory

More information

ebook140-11

ebook140-11 11 VPN Windows NT4 B o r d e r M a n a g e r VPN VPN V P N V P N V P V P N V P N TCP/IP 11.1 V P N V P N / ( ) 11.1.1 11 V P N 285 2 3 1. L A N LAN V P N 10MB 100MB L A N VPN V P N V P N Microsoft PPTP

More information

目 录 Linux Mint 简介... 3 Linux Mint 安装... 6 Linux Mint 桌面初识... 18 软件管理...30 小技巧...40 总结...42

目 录 Linux Mint 简介... 3 Linux Mint 安装... 6 Linux Mint 桌面初识... 18 软件管理...30 小技巧...40 总结...42 官方用户手册 Linux Mint 9 Isadora 主版本 翻译 jluliuchao 皮蛋侠 第 1 页/共 42 页 目 录 Linux Mint 简介... 3 Linux Mint 安装... 6 Linux Mint 桌面初识... 18 软件管理...30 小技巧...40 总结...42 Linux Mint 简介 Linux Mint 是一种计算机操作系统 它被设计运行于现今大部分硬件系统

More information

Chapter 2

Chapter 2 2 (Setup) ETAP PowerStation ETAP ETAP PowerStation PowerStation PowerPlot ODBC SQL Server Oracle SQL Server Oracle Windows SQL Server Oracle PowerStation PowerStation PowerStation PowerStation ETAP PowerStation

More information

温州市政府分散采购

温州市政府分散采购 温 州 市 政 府 分 散 采 购 招 标 文 件 招 标 编 号 :F - G B 2 0 1 6 0 3 1 4 0 0 4 7 招 标 项 目 : 温 州 市 人 民 政 府 办 公 室 政 务 云 平 台 ( 重 ) 招 标 方 式 : 公 开 招 标 招 标 人 : 温 州 市 人 民 政 府 办 公 室 招 标 代 理 : 二 〇 一 六 年 三 月 目 录 投 标 保 证 金 办 理

More information

一.NETGEAR VPN防火墙产品介绍

一.NETGEAR VPN防火墙产品介绍 NETGEAR VPN NETGEAR 6 http://www.netgear.com.cn - 1 - NETGEAR VPN... 4 1.1 VPN...4 1.2 Dynamic Domain Name Service...4 1.3 Netgear VPN...4 Netgear VPN... 6 2.1 FVS318 to FVS318 IKE Main...7 2.1.1 A VPN

More information

EPSON

EPSON NPD5493-00 TC .... 5....5....5....6 SSL/TLS....7....7 IP....8.... 8 Web Config...9 Web Config...10 EpsonNet Config...11 EpsonNet Config Windows...11 EpsonNet Config Windows...11 EpsonNet Config - Windows...

More information

Pchome

Pchome H Linux Linux Red Hat Linux Fedora 1 DNS Mail WWW Domain tslg.idv.tw IP 192.168.1.254 tslg.idv.tw PChome Seednet ISP http://rs.twnic.net.tw/index2.html Seednet http://rs.seed.net.tw/ Pchome http://myname.pchome.com.tw/

More information

Paratune用户手册

Paratune用户手册 PARATERA Paratune 用 户 手 册 v4.0 北 京 并 行 科 技 有 限 公 司 2013 / 10 目 录 1 手 册 说 明... 5 1.1 关 于 手 册... 5 1.2 排 版 约 定... 5 1.3 名 词 解 释... 5 1.4 相 关 文 档... 6 1.5 信 息 反 馈... 6 2 Paratune 简 介... 7 2.1 软 件 界 面 与 主

More information

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG --------------------------------------------TABLE OF CONTENTS------------------------------------------

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

自由軟體教學平台

自由軟體教學平台 NCHC Opensource task force DRBL steven@nchc.gov.tw, c00hkl00@nchc.gov.tw National Center for High-Performance Computing http://www.nchc.gov.tw Jan, 2003 1 2003/1/28 ( ) 09:00-10:30 10:40-12:00 Linux 13:00-14:30

More information

自由軟體社群發展經驗與 Linux認證介紹

自由軟體社群發展經驗與  Linux認證介紹 -- (http://linux.vbird.org) 2011/08/12 1 -- -- 不 理 便 了 來 連 ( ) ( ) 論 ~ ~ 2 復 理 3 4 復 數 量 復 離 來 ~ @_@ 5 - 年 Linux windows virtualbox 不 理 Linux Xen 立 4 4GB 了 30 xen 來 sudo xm 來 Linux I/O 例 yum 6 - 年 Windows

More information

IP505SM_manual_cn.doc

IP505SM_manual_cn.doc IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP

More information

自由軟體教學平台

自由軟體教學平台 NCHC Opensource task force DRBL c00hkl00@nchc.gov.tw, steven@nchc.gov.tw National Center for High-Performance Computing http://www.nchc.gov.tw Dec, 2002 1 Outline 1. 2. DRBL 3. 4. Service DHCP, TFTP, NFS,

More information

GPRS IP MODEM快速安装说明

GPRS IP MODEM快速安装说明 GF-3026D CDMA 无 线 路 由 器 用 户 手 册 北 京 嘉 复 欣 科 技 有 限 公 司 地 址 : 北 京 市 海 淀 区 阜 成 路 115 号 北 京 印 象 2 号 楼 213 室 电 话 :86-10-88122130 88153193 88153197 传 真 :86-10-88122129 网 站 :http://www.garefowl.com/ 目 录 一 产 品

More information

深圳市亚可信息技术有限公司 NetWeaver 7.3 EhP1 ABAP on Redhat Enterprise Linux Server 62 for Oracle112 High Availability System Installation Created by

深圳市亚可信息技术有限公司 NetWeaver 7.3 EhP1 ABAP on Redhat Enterprise Linux Server 62 for Oracle112 High Availability System Installation Created by NetWeaver 7.3 EhP1 ABAP on Redhat Enterprise Linux Server 62 for Oracle112 High Availability System Installation Created by 13092539@qq.com 1. 安装规划 Parameter Host A Host B Host C For ASCS Database Dialog

More information

Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc.

Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc. Junos Pulse Mobile Security 4.0 2012 6 R1 2012, Juniper Networks, Inc. Junos Pulse Mobile Security Juniper Networks, Inc. 1194 North Mathilda Avenue Sunnyvale, California 94089 408-745-2000 www.juniper.net

More information

ebook71-13

ebook71-13 13 I S P Internet 13. 2. 1 k p p p P P P 13. 2. 2 1 3. 2. 3 k p p p 1 3. 2. 4 l i n u x c o n f P P P 13. 2. 5 p p p s e t u p 13. 2. 6 p p p s e t u p P P P 13. 2. 7 1 3. 2. 8 C a l d e r a G U I 13.

More information

RunPC2_.doc

RunPC2_.doc PowerBuilder 8 (5) PowerBuilder Client/Server Jaguar Server Jaguar Server Connection Cache Thin Client Internet Connection Pooling EAServer Connection Cache Connection Cache Connection Cache Connection

More information

audiogram3 Owners Manual

audiogram3 Owners Manual USB AUDIO INTERFACE ZH 2 AUDIOGRAM 3 ( ) * Yamaha USB Yamaha USB ( ) ( ) USB Yamaha (5)-10 1/2 AUDIOGRAM 3 3 MIC / INST (XLR ) (IEC60268 ): 1 2 (+) 3 (-) 2 1 3 Yamaha USB Yamaha Yamaha Steinberg Media

More information

SL2511 SR Plus 操作手冊_單面.doc

SL2511 SR Plus 操作手冊_單面.doc IEEE 802.11b SL-2511 SR Plus SENAO INTERNATIONAL CO., LTD www.senao.com - 1 - - 2 - .5 1-1...5 1-2...6 1-3...6 1-4...7.9 2-1...9 2-2 IE...11 SL-2511 SR Plus....13 3-1...13 3-2...14 3-3...15 3-4...16-3

More information

Microsoft Word - install_manual-V _CN.docx

Microsoft Word - install_manual-V _CN.docx NO TASK Q-Sign Install Manual PAGE 1/28 Q-Sign INSTALL MANUAL Version 3.0 Server Manager Client Codec NO TASK Q-Sign Install Manual PAGE 2/28 History DATE Contents Name Ver. Remark 2009-02-11 Q-Sign Ver.

More information

文件1

文件1 iptables log rule policy ( ) 1. (Packet Filter) OSI IP (Router) router router access control list ACL (Transparency) 2. Proxy store-and-forward proxy filter " " 3. Application internet java script 4. Hardware

More information

~# nano /etc/my.cnf [mysqld] character_set_server=utf8 character_set_client=utf8 max_heap_table_size=90m tmp_table_size=64m join_buffer_size=64m innod

~# nano /etc/my.cnf [mysqld] character_set_server=utf8 character_set_client=utf8 max_heap_table_size=90m tmp_table_size=64m join_buffer_size=64m innod Cacti 1.1.x CentOS7 安裝手冊 201708 台大網路組游子興 安裝 nano 文字編輯器 : ~# yum install nano VM Player 時間修正 : ~# date ~# vmware-toolbox-cmd timesync enable ~# date 關閉 SELINUX: ~# nano /etc/selinux/config SELINUX=disabled

More information

AXIS P7224 Video Encoder Blade – Installation Guide

AXIS P7224 Video Encoder Blade – Installation Guide 安 装 指 南 AXIS P7224 刀 片 视 频 编 码 器 中 文 法 律 考 虑 事 项 视 频 和 音 频 监 视 可 能 会 受 法 律 限 制, 各 个 国 家 / 地 区 的 法 律 会 有 所 不 同 如 将 本 产 品 用 于 监 控 目 的, 需 要 先 检 查 是 否 符 合 你 所 在 区 域 内 的 法 律 规 定 本 产 品 包 括 四 个 (4) H.264 解 码

More information

ESP-Jumpstart

ESP-Jumpstart 2016-2019 2019 08 08 Contents 1 3 1.1 ESP32.............................. 3 1.2.................................................. 5 2 7 2.1............................................. 7 2.2 ESP-IDF............................................

More information