一、概述 {#heading-1}
本文主要描述 JumpServer 如何通过 VNC 协议纳管 Linux 资产。本次示例以 CentOS 7.6 为例。
VNC 协议是一种连接协议,允许用户使用键盘和鼠标与远程服务器的图形桌面环境交互。相对于命令行模式,VNC 协议连接服务器可以使管理远程服务器上的文件、软件等设置变得方便与容易。
二、Linux 侧配置 {#heading-2}
1、安装桌面环境 {#heading-3}
VNC 协议连接需要 Linux 系统安装的有桌面环境。如果不安装桌面环境,连接后为空白页面。
此示例中安装 GNOME 桌面,您也可以根据需求安装您需要的桌面环境,例如:KDE、MATE、LXQt、Cinnamon 等。
#列出所有已安装和可安装的软件
yum grouplist
#安装桌面环境
yum groupinstall -y "GNOME Desktop"
#修改 Linux 系统默认启动方式为图形化界面
systemctl set-default graphical.target
#查看 Linux 系统默认启动方式
systemctl get-default
#切换 Linux 系统默认启动方式为命令行
systemctl set-default multi-user.target
2、安装 VNC 服务软件 {#heading-4}
在 Linux 系统中安装 VNC 服务,并验证是否安装成功。
#安装 VNC 服务
yum install tigervnc-server -y
#验证是否安装成功
rpm -qa | grep tigervnc-server
查看 VNC 安装成功如下图所示:
3、启动第一个 VNC 桌面 {#heading-5}
创建用户 VNC01 用来连接第一个 VNC 桌面。
#新建 VNC01 用户
adduser VNC01
#设置 VNC01 用户的登录密码
passwd VNC01
复制 VNC 的服务器启动操作脚本 vncserver@.service 并重启命名。如下命令: vncserver@:1.service 其中:"1"表示桌面号,该桌面启动对应的端口号为 5901,即 VNC 默认端口号+桌面号。
#复制 VNC 服务器启动操作脚本
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
编辑复制完成的启动脚本,添加连接用户,如下所示:
#编辑启动脚本
vim /etc/systemd/system/vncserver@\:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
\[Service\]
Type=simple
Clean any existing files in /tmp/.X11-unix environment
======================================================
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i \> /dev/null 2\>\&1 \|\| :'
ExecStart=/usr/bin/vncserver_wrapper VNC01 %i
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 服务。
#加载新配置
systemctl daemon-reload
#启用 VNC01 用户对应的桌面1服务
systemctl start vncserver@:1.service
#设置 VNC01 用户对应的桌面1服务为开机自启动
systemctl enable vncserver@:1.service
查看端口是否监听,并开放端口。
#查看端口监听情况
[root@VM-24-7-centos ~]# netstat -nltp | grep Xvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 1554/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 1554/Xvnc
tcp6 0 0 :::5901 :::* LISTEN 1554/Xvnc
tcp6 0 0 :::6001 :::* LISTEN 1554/Xvnc
#开放防火墙对应端口
firewall规则:
firewall-cmd --zone=public --add-port=5901/tcp --permanent #开放 5901 端口
firewall-cmd --reload #更新防火墙规则
iptables规则:
iptables -I INPUT -p tcp --dport 5901 -j ACCEPT #开放 5901 端口
#关闭 SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
测试连接。VNC 客户端通过 "VNC Viewer" 进行连接,下载方式地址:https://www.realvnc.com/en/connect/download/viewer/
4、启动第二个 VNC 界面 {#heading-6}
创建用户 VNC02 用来连接第二个 VNC 桌面。
#新建 VNC02 用户
adduser VNC02
#设置 VNC02 用户的登录密码
passwd VNC02
复制 VNC 的服务器启动操作脚本 vncserver@.service 并重启命名。具体解释见:启动第一个 VNC 界面。
#复制 VNC 服务器启动操作脚本
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
编辑复制完成的启动脚本,添加连接用户,如下所示:
#编辑启动脚本
vim /etc/systemd/system/vncserver@\:2.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
\[Service\]
Type=simple
Clean any existing files in /tmp/.X11-unix environment
======================================================
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i \> /dev/null 2\>\&1 \|\| :'
ExecStart=/usr/bin/vncserver_wrapper VNC02 %i
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 服务。
#加载新配置
systemctl daemon-reload
#启用 VNC02 用户对应的桌面2服务
systemctl start vncserver@:2.service
#设置 VNC02 用户对应的桌面2服务为开机自启动
systemctl enable vncserver@:2.service
查看端口是否监听,并开放端口。
#查看端口监听情况
[root@VM-24-7-centos ~]# netstat -nltp | grep Xvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 1554/Xvnc
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 26460/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 1554/Xvnc
tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 26460/Xvnc
tcp6 0 0 :::5901 :::* LISTEN 1554/Xvnc
tcp6 0 0 :::5902 :::* LISTEN 26460/Xvnc
tcp6 0 0 :::6001 :::* LISTEN 1554/Xvnc
tcp6 0 0 :::6002 :::* LISTEN 26460/Xvnc
#开放防火墙对应端口
firewall规则:
firewall-cmd --zone=public --add-port=5902/tcp --permanent #开放5902端口
firewall-cmd --reload #更新防火墙规则
iptables规则:
iptables -I INPUT -p tcp --dport 5902 -j ACCEPT #开放5902端口
#关闭SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
测试连接。VNC 客户端通过 "VNC Viewer" 进行连接,下载方式地址:https://www.realvnc.com/en/connect/download/viewer/
三、JumpServer 侧配置 {#heading-7}
JumpServer 侧一个资产一个协议仅能选择一次,所以两个不同端口的 VNC 桌面需要纳管两次,即创建两个资产,如下所示:
1、纳管第一个 VNC 桌面 {#heading-8}
创建 Linux 资产一,纳管第一个 VNC 桌面。JumpServer 页面的操作顺序按钮依次为:控制台→资产管理→资产列表→主机→创建。
添加 VNC 登录账号。
授权该资产给用户连接。JumpServer 页面的操作顺序按钮依次为:控制台→权限管理→资产授权→创建。授权账号选择指定账号 VNC01。
连接测试。
2、纳管第二个 VNC 桌面 {#heading-9}
创建 Linux 资产二,纳管第二个 VNC 桌面。JumpServer 页面的操作顺序按钮依次为:控制台→资产管理→资产列表→主机→创建。
创建完成后,通过 VNC 测试连接。
授权该资产给用户连接。JumpServer 页面的操作顺序按钮依次为:控制台→权限管理→资产授权→创建。授权账号选择指定账号 VNC02。
测试连接。