一、概述
本文主要描述 JumpServer 如何通过 VNC 协议纳管 Linux 资产。本次示例以 Ubuntu 22.04 为例。
VNC 协议是一种连接协议,允许用户使用键盘和鼠标与远程服务器的图形桌面环境交互。相对于命令行模式,VNC 协议连接服务器可以使管理远程服务器上的文件、软件等设置变得方便与容易。
二、Linux 资产安装配置 VNC Server
1.安装桌面环境
VNC 协议连接需要 Linux 系统安装的有桌面环境。如果不安装桌面环境,连接后为空白页面。
此示例中安装 GNOME 桌面,您也可以根据需求安装您需要的桌面环境,例如:KDE、MATE、LXQt、Cinnamon 等。
# 安装 tasksel 工具(若未安装)
sudo apt update && sudo apt install -y tasksel
# 列出所有可安装/已安装的软件组
sudo tasksel --list-task
# 安装 GNOME 桌面环境
sudo apt update && sudo apt install -y ubuntu-desktop
# 修改 Linux 系统默认启动方式为图形化界面
sudo systemctl set-default graphical.target
# 查看 Linux 系统默认启动方式
systemctl get-default
# 切换 Linux 系统默认启动方式为命令行
sudo systemctl set-default multi-user.target2.安装 VNC 服务软件
在 Linux 系统中安装 VNC 服务,并验证是否安装成功。
# 更新包索引并安装 VNC 服务
sudo apt update && sudo apt install -y tigervnc-standalone-server tigervnc-common
# 查看已安装的 tigervnc 相关包
dpkg -l | grep tigervnc查看 VNC 安装成功如下图所示:

3.启动第一个 VNC 桌面
创建用户 vnc01 用来连接第一个 VNC 桌面。
# 新建 vnc01 用户
adduser vnc01
# 设置 vnc01 用户的登录密码(可选,若上一步创建用户过程中已经设置过密码,这一步可以跳过)
passwd vnc01复制 VNC 的服务器启动操作脚本 vncserver@.service 并重启命名。如下命令: vncserver@:1.service 其中:“1”表示桌面号,该桌面启动对应的端口号为 5901,即 VNC 默认端口号+桌面号。
# 复制 VNC 服务器启动操作脚本
cp /lib/systemd/system/tigervncserver@.service /etc/systemd/system/tigervncserver@:1.service编辑复制完成的启动脚本,添加连接用户,如下所示:
# 编辑启动脚本
vim /etc/systemd/system/tigervncserver@:1.service
[Unit]
Description=TigerVNC Server for :1 (vnc01)
After=syslog.target network.target
[Service]
Type=forking
User=vnc01
Group=vnc01
WorkingDirectory=/home/vnc01
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -depth 24 -geometry 1280x720 -localhost no
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target使用需要登录 VNC 的用户登录 Linux 资产,设置 VNC 密码。
# 切换为 vnc01 用户
su - vnc01
# 设置 vnc01 用户的 VNC 密码,输入完成密码后会提示是否设置该用户:只允许查看,无控制权限,可根据需求设置。
vncpasswd切换至 root 用户,并启动 VNC 服务。
# 切换至 root 用户
su - root
# 加载新配置
systemctl daemon-reload
# 启用 vnc01 用户对应的桌面1服务
systemctl start tigervncserver@:1.service
# 设置 vnc01 用户对应的桌面1服务为开机自启动
systemctl enable tigervncserver@:1.service查看端口是否监听,并开放端口。
# 查看端口监听情况
root@ubuntu22:~# netstat -nltp | grep Xtigervnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 2113593/Xtigervnc
tcp6 0 0 :::5901 :::* LISTEN 2113593/Xtigervnc
# 开放防火墙对应端口
# 查看 ufw 状态(默认可能是 inactive,即未启用)
sudo ufw status
# 开放 5901 端口(TCP 协议,VNC 用),并设置为“永久生效”(ufw 规则默认重启后保留)
sudo ufw allow 5901/tcp
# 启用 ufw 防火墙(若之前未启用,必须执行这步,否则规则不生效)
sudo ufw enable
# 再次查看状态,确认 5901 端口已开放
sudo ufw status测试连接。VNC 客户端通过"VNC Viewer"进行连接,下载方式地址:https://sourceforge.net/projects/tigervnc/

4.启动第二个 VNC 界面
创建用户 vnc02 用来连接第二个 VNC 桌面。
# 新建 vnc02 用户
adduser vnc02
# 设置 vnc02 用户的登录密码(可选,若上一步创建用户过程中已经设置过密码,这一步可以跳过)
passwd vnc02复制 VNC 的服务器启动操作脚本 vncserver@.service 并重启命名。具体解释见:启动第一个 VNC 界面。
# 复制 VNC 服务器启动操作脚本
cp /lib/systemd/system/tigervncserver@.service /etc/systemd/system/tigervncserver@:2.service编辑复制完成的启动脚本,添加连接用户,如下所示:
# 编辑启动脚本
vim /etc/systemd/system/tigervncserver@:2.service
[Unit]
Description=TigerVNC Server for :2 (vnc02)
After=syslog.target network.target
[Service]
Type=forking
User=vnc02
Group=vnc02
WorkingDirectory=/home/vnc02
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -depth 24 -geometry 1280x720 -localhost no
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target使用需要登录 VNC 的用户登录该 Linux 资产,设置 VNC 密码。
# 切换为 vnc02 用户
su - vnc02
# 设置 vnc02 用户的 VNC 密码,输入完成密码后会提示是否设置该用户:只允许查看,无控制权限,可根据需求设置。
vncpasswd切换至 root 用户,并启动 VNC 服务。
# 切换至 root 用户
su - root
# 加载新配置
systemctl daemon-reload
# 启用 vnc02 用户对应的桌面2服务
systemctl start tigervncserver@:2.service
# 设置 vnc02 用户对应的桌面2服务为开机自启动
systemctl enable tigervncserver@:2.service查看端口是否监听,并开放端口。
# 查看端口监听情况
root@ubuntu22:~# netstat -nltp | grep Xtigervnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 2113593/Xtigervnc
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 2313281/Xtigervnc
tcp6 0 0 :::5901 :::* LISTEN 2113593/Xtigervnc
tcp6 0 0 :::5902 :::* LISTEN 2313281/Xtigervnc
# 开放防火墙对应端口
# 查看 ufw 状态(默认可能是 inactive,即未启用)
sudo ufw status
# 开放 5902 端口(TCP 协议,VNC 用),并设置为“永久生效”(ufw 规则默认重启后保留)
sudo ufw allow 5902/tcp
# 启用 ufw 防火墙(若之前未启用,必须执行这步,否则规则不生效)
sudo ufw enable
# 再次查看状态,确认 5902 端口已开放
sudo ufw status测试连接。VNC 客户端通过"VNC Viewer"进行连接,下载方式地址:https://sourceforge.net/projects/tigervnc/

三、JumpServer 纳管 VNC 资产
JumpServer 侧一个资产一个协议仅能选择一次,所以两个不同端口的 VNC 桌面需要纳管两次,即创建两个资产,如下所示:
1.纳管第一个 VNC 桌面
创建 Linux 资产一,纳管第一个 VNC 桌面。JumpServer 页面的操作顺序按钮依次为:控制台→资产管理→资产列表→Linux→创建。

授权该资产给用户连接。JumpServer 页面的操作顺序按钮依次为:控制台→权限管理→资产授权→创建。授权账号选择指定账号 vnc01。

测试连接。


2.纳管第二个 VNC 桌面
创建 Linux 资产二,纳管第二个 VNC 桌面。JumpServer 页面的操作顺序按钮依次为:控制台→资产管理→资产列表→Linux→创建。

授权该资产给用户连接。JumpServer 页面的操作顺序按钮依次为:控制台→权限管理→资产授权→创建。授权账号选择指定账号 vnc02。

测试连接。

