# 安装文档

# docker 安装

默认使用Docker Hub源。

国内用户可以使用阿里云镜像仓库 registry.cn-qingdao.aliyuncs.com/dushixiang/next-terminal。

# 环境变量

参数 含义 默认值
DB 数据库类型,可选 ['sqlite','mysql'] sqlite
SQLITE_FILE sqlite 数据库文件存放地址 /usr/local/next-terminal/data/sqlite/next-terminal.db
MYSQL_HOSTNAME mysql 数据库地址 127.0.0.1
MYSQL_PORT mysql 数据库端口 3306
MYSQL_USERNAME mysql 数据库用户 next-terminal
MYSQL_PASSWORD mysql 数据库密码 next-terminal
MYSQL_DATABASE mysql 数据库名称 next-terminal
SERVER_ADDR 服务器监听地址 0.0.0.0:8088
ENCRYPTION_KEY 授权凭证和资产的密码,密钥等敏感信息加密的key next-terminal
GUACD_HOSTNAME Guacd 服务地址 127.0.0.1
GUACD_PORT Guacd 服务监听端口 4822
GUACD_RECORDING 录屏文件保存目录 /usr/local/next-terminal/data/recording
GUACD_DRIVE 远程桌面挂载盘根目录 /usr/local/next-terminal/data/drive

# 使用 sqlite 存储数据

在任意位置创建文件夹 next-terminal ,然后在此文件夹下创建 docker-compose.yml 并写入如下内容:

version: '3.3'
services:
  guacd:
    image: dushixiang/guacd:1.3.0
    volumes:
      - ./data:/usr/local/next-terminal/data
    restart:
          always
  next-terminal:
    image: dushixiang/next-terminal:latest
    environment:
      DB: sqlite
      GUACD_HOSTNAME: guacd
      GUACD_PORT: 4822
    ports:
      - "8088:8088"
    volumes:
      - /etc/machine-id:/etc/machine-id
      - /etc/localtime:/etc/localtime
      - ./data:/usr/local/next-terminal/data
    restart:
          always

前台启动命令

docker-compose up

后台启动命令

docker-compose up -d

# 使用 mysql 存储数据

在任意位置创建文件夹 next-terminal ,然后在此文件夹下创建 docker-compose.yml 并写入如下内容:

version: '3.3'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: next-terminal
      MYSQL_USER: next-terminal
      MYSQL_PASSWORD: next-terminal
      MYSQL_ROOT_PASSWORD: next-terminal
    volumes:
      - ./data/mysql:/var/lib/mysql
    restart:
          always
  guacd:
    image: dushixiang/guacd:1.3.0
    volumes:
      - ./data:/usr/local/next-terminal/data
    restart:
          always
  next-terminal:
    image: dushixiang/next-terminal:latest
    environment:
      DB: mysql
      MYSQL_HOSTNAME: mysql
      MYSQL_PORT: 3306
      MYSQL_USERNAME: next-terminal
      MYSQL_PASSWORD: next-terminal
      MYSQL_DATABASE: next-terminal
      GUACD_HOSTNAME: guacd
      GUACD_PORT: 4822
    ports:
      - "8088:8088"
    volumes:
      - /etc/machine-id:/etc/machine-id
      - /etc/localtime:/etc/localtime
      - ./data:/usr/local/next-terminal/data
    depends_on:
      - mysql
    restart:
          always

前台启动命令

docker-compose up

后台启动命令

docker-compose up -d

# 使用外部的 mysql 存储数据

在任意位置创建文件夹 next-terminal ,然后在此文件夹下创建 docker-compose.yml 并写入如下内容:

version: '3.3'
services:
  guacd:
    image: dushixiang/guacd:1.3.0
    volumes:
      - ./data:/usr/local/next-terminal/data
    restart:
          always
  next-terminal:
    image: dushixiang/next-terminal:latest
    environment:
      DB: mysql
      # 请修改下面的 MySql 配置,需自行创建数据库和用户
      MYSQL_HOSTNAME: mysql
      MYSQL_PORT: 3306
      MYSQL_USERNAME: next-terminal
      MYSQL_PASSWORD: next-terminal
      MYSQL_DATABASE: next-terminal
      # 请修改上面的 MySql 配置,需自行创建数据库和用户
      GUACD_HOSTNAME: guacd
      GUACD_PORT: 4822
    ports:
      - "8088:8088"
    volumes:
      - /etc/machine-id:/etc/machine-id
      - /etc/localtime:/etc/localtime
      - ./data:/usr/local/next-terminal/data
    restart:
          always

前台启动命令

docker-compose up

后台启动命令

docker-compose up -d

# 原生安装

# 安装 Apache Guacamole-Server

执行安装命令

yum install -y libguac-client-kubernetes libguac-client-rdp libguac-client-ssh libguac-client-telnet libguac-client-vnc guacd

配置 guacd 服务

mkdir /etc/guacamole/ && cat <<EOF >> /etc/guacamole/guacd.conf
[daemon]
pid_file = /var/run/guacd.pid
log_level = info

[server]
# 监听地址
bind_host = 127.0.0.1
bind_port = 4822
EOF

为了避免权限问题导致错误修改使用 root 用户启动guacd服务,修改 /usr/lib/systemd/system/guacd.service 文件,注释掉 User 和 Group 这两行。

[Unit]
Description=Guacamole proxy daemon
Documentation=man:guacd(8)
After=network.target

[Service]
EnvironmentFile=-/etc/sysconfig/guacd
Environment=HOME=/var/lib/guacd
ExecStart=/usr/sbin/guacd -f $OPTS
Restart=on-failure
# User=guacd
# Group=guacd

[Install]
WantedBy=multi-user.target

启动 guacd 服务

# 重载服务
systemctl daemon-reload
# 开机自启
systemctl enable guacd
# 启动服务
systemctl start guacd
# 查看状态
systemctl status guacd

# 安装字体(SSH使用)

安装字体管理软件

yum install -y fontconfig mkfontscale

下载字体文件并移动到 /usr/share/fonts/目录下

cd  /usr/share/fonts/
# 下载英文字体
wget https://gitee.com/dushixiang/next-terminal/raw/master/guacd/fonts/Menlo-Regular.ttf
# 下载中文字体
wget https://gitee.com/dushixiang/next-terminal/raw/master/guacd/fonts/SourceHanSansCN-Regular.otf

更新字体

mkfontscale
mkfontdir
fc-cache

# 安装 Next Terminal

示例步骤安装在 /usr/local/next-terminal,你可以自由选择安装目录。

下载

国内用户如果访问不到GitHub,可从 Gitee 进行下载,地址为: https://gitee.com/dushixiang/next-terminal

wget https://github.com/dushixiang/next-terminal/releases/latest/download/next-terminal.tgz

解压

tar -zxvf next-terminal.tgz -C /usr/local/

/usr/local/next-terminal/etc/next-terminal下创建或修改配置文件config.yml

db: sqlite
# 当db为sqlite时mysql的配置无效
#mysql:
#  hostname: 172.16.101.32
#  port: 3306
#  username: root
#  password: mysql
#  database: next-terminal

# 当db为mysql时sqlite的配置无效
sqlite:
  file: 'next-terminal.db'
server:
  addr: 0.0.0.0:8088
# 当设置下面两个参数时会自动开启https模式(前提是证书文件存在)
#  cert: /root/next-terminal/cert.pem
#  key: /root/next-terminal/key.pem

# 授权凭证和资产的密码,密钥等敏感信息加密的key,默认`next-terminal`
#encryption-key: next-terminal
guacd:
  hostname: 127.0.0.1
  port: 4822
  # 此路径需要为绝对路径,并且next-terminal和guacd都能访问到
  recording: '/usr/local/next-terminal/data/recording'
  # 此路径需要为绝对路径,并且next-terminal和guacd都能访问到
  drive: '/usr/local/next-terminal/data/drive'

启动

./next-terminal

使用系统服务方式启动

/etc/systemd/system/ 目录创建 next-terminal.service 文件并写入以下内容

[Unit]
Description=next-terminal service
After=network.target

[Service]
User=root
WorkingDirectory=/usr/local/next-terminal
ExecStart=/usr/local/next-terminal/next-terminal
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动 Next-Terminal 服务

# 重载服务
systemctl daemon-reload
# 开机启动
systemctl enable next-terminal
# 启动服务
systemctl start next-terminal
# 查看状态
systemctl status next-terminal

# 常见问题

# 如何进行反向代理?

主要是反向代理websocket,示例如下

location / {
    proxy_pass http://127.0.0.1:8088/;
    proxy_set_header Host      $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
}

# 访问realvnc提示验证失败?

  1. 把密码类型修改为VNC
  2. 把加密类型修改为 Prefer On

# docker安装如何更新?

推荐使用watchtower自动更新

手动更新需要先拉取最新的镜像,再按照 docker 安装步骤进行安装

docker pull dushixiang/next-terminal:latest

# 连接rdp协议的windows7或者windows server 2008直接断开?

因为freerdp的一个问题导致的,把 设置>RDP 下面的禁用字形缓存打开即可。 详情可参考 https://issues.apache.org/jira/browse/GUACAMOLE-1191

# ssh协议中文字体乱码怎么办?

新版docker容器中已经内置了中文字体,如果是原生安装的,请自行安装中文字体。

# ssh协议类型的资产连接模式有什么区别?

  1. 默认:默认使用guacd模式,但某些密钥不支持。
  2. 原生:使用golang+xterm.js方式实现的webssh,传输协议是文本,操作响应更快。但目前尚未实现实时监控。

# 系统密码忘记了怎么办?

首先需要进入程序所在目录,使用docker安装的程序目录为:/usr/local/next-terminal

执行命令

./next-terminal --reset-password admin

其中 admin 为用户登录账号,成功之后会输出


 _______                   __    ___________                  .__              .__   
 \      \   ____ ___  ____/  |_  \__    ___/__________  _____ |__| ____ _____  |  |  
 /   |   \_/ __ \\  \/  /\   __\   |    |_/ __ \_  __ \/     \|  |/    \\__  \ |  |  
/    |    \  ___/ >    <  |  |     |    |\  ___/|  | \/  Y Y  \  |   |  \/ __ \|  |__
\____|__  /\___  >__/\_ \ |__|     |____| \___  >__|  |__|_|  /__|___|  (____  /____/
        \/     \/      \/                     \/            \/        \/     \/      v0.3.0

当前数据库模式为:mysql
Mar  5 20:00:16.923 [DEBU] 用户「admin」密码初始化为: next-terminal

# TOTP客户端丢了怎么办?

首先需要进入程序所在目录,使用docker安装的程序目录为:/usr/local/next-terminal

执行命令

./next-terminal --reset-totp admin

其中 admin 为用户登录账号,成功之后会输出


 _______                   __    ___________                  .__              .__   
 \      \   ____ ___  ____/  |_  \__    ___/__________  _____ |__| ____ _____  |  |  
 /   |   \_/ __ \\  \/  /\   __\   |    |_/ __ \_  __ \/     \|  |/    \\__  \ |  |  
/    |    \  ___/ >    <  |  |     |    |\  ___/|  | \/  Y Y  \  |   |  \/ __ \|  |__
\____|__  /\___  >__/\_ \ |__|     |____| \___  >__|  |__|_|  /__|___|  (____  /____/
        \/     \/      \/                     \/            \/        \/     \/      v0.4.0

当前数据库模式为:mysql
Mar  5 20:00:16.923 [DEBU] 用户「admin」已重置TOTP

# 想要修改数据库敏感信息加密的key怎么办?

首先需要进入程序所在目录,使用docker安装的程序目录为:/usr/local/next-terminal

执行命令

./next-terminal --encryption-key 旧的加密key --new-encryption-key 新的的加密key

成功之后会输出


 _______                   __    ___________                  .__              .__   
 \      \   ____ ___  ____/  |_  \__    ___/__________  _____ |__| ____ _____  |  |  
 /   |   \_/ __ \\  \/  /\   __\   |    |_/ __ \_  __ \/     \|  |/    \\__  \ |  |  
/    |    \  ___/ >    <  |  |     |    |\  ___/|  | \/  Y Y  \  |   |  \/ __ \|  |__
\____|__  /\___  >__/\_ \ |__|     |____| \___  >__|  |__|_|  /__|___|  (____  /____/
        \/     \/      \/                     \/            \/        \/     \/      v0.4.0

当前数据库模式为:mysql
Mar  5 20:00:16.923 [DEBU] encryption key has being changed.

最后重新启动程序,并且把加密key修改为新的。

# 使用 SSH RSA 证书无法登录,提示 ssh: no key found

PuTTY 生成的密钥无法直接使用,需要导出后再使用。

# 原生安装如何升级?

下载打包后的压缩文件,替换其中的 next-terminal 文件和 web 文件夹即可。

# 资产状态检测原理是什么?

tcp连接到目标IP和端口进行测试的,默认超时时间是3秒,在计划任务中每隔一个小时检测一次。如果资产状态检测为不在线,可以自行登录next-terminal所在服务器使用telnet进行测试。

# 如何从 0.5.0 升级?

  • docker容器升级

    1. 删除掉旧的容器
    2. 按照新的docker安装方式进行安装
    3. 移动录屏文件到新的录屏文件目录(默认在 data/recording 目录下)
  • 原生安装升级

    1. 下载最新的二进制文件并解压
    2. 替换 next-terminal 文件和 web 文件夹
    3. 替换配置文件 config.yaml 并修改对应的配置