本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-configure-vnc-on-centos-8/
Virtual Network Computing (VNC) 是一个图形桌面共享系统,它允许你使用本地的键盘和鼠标来远程控制另外一台计算机。
本文涉及如何在 CentOS 8 上安装和配置 VNC 的步骤。我们将会向你展示,如何通过 SSH 隧道技术来安全连接到 VNC 服务器。
一、前提条件。
想要继续这篇指南,你需要以拥有 sudo 权限的用户身份登录远程 CentOS 机器上。
二、安装桌面环境
通常,服务器没有安装任何的桌面环境。如果你拥有的一台机器没有 GUI,第一步就是安装它。否则,跳过这个步骤。
运行下面的命令来在你的远程机器上安装 Gnome,CentOS 8 下的默认桌面环境。
sudo dnf groupinstall "Server with GUI"
依赖你的系统,下载和安装 Gnome 软件包,以及依赖软件包需要花费一些时间。
三、安装 VNC 服务器
TigerVNC 是一个维护很活跃的开源高性能 VNC 服务器。它在默认的 CentOS 源仓库中可用,输入下面的命令,安装它:
sudo dnf install tigervnc-server
一旦 VNC 服务器被安装好,运行 vncserver
命令来创建初始化设置,并且设置密码。运行下面的命令时,不要使用 sudo
:
vncserver
你将会被提示输入并且确认一个密码,并且是否设置一个仅仅查看的密码。如果你选择设置一个仅仅查看的密码,这个用户将不能通过键盘和鼠标和 VNC 实例进行交互。
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth: file /home/linuxize/.Xauthority does not exist
New 'server2.linuxize.com:1 (linuxize)' desktop at :1 on machine server2.linuxize.com
Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/linuxize/.vnc/server2.linuxize.com:1.log
第一次运行vncserver
命令,它将会在~/.vnc
目录下创建并且存储密码文件。如果该文件夹没有被创建,那么首先会创建该文件夹。
请留意上面主机名后面的:1
。则表示 正在运行的 VNC 服务器上的显示端口号。在我们的例子中,服务器运行在 TCP 端口5901
(5900+1)。如果你创建了第二个实例,他将会运行到下一个闲置的端口上,例如::2
,这意味着,服务器运行在端口号5902
(5900+2)上。
在和 VNC 服务器上工作的时候,最重要的一点就是,:X
就是显示端口号,即:5900+X
。
在继续下面的步骤之前,第一步通过使用vncserver
命令加上-kill
选项,停止 VNC 实例。在我们的例子中,服务器运行在端口号 5901(:1
),因此,停止它,运行:
vncserver -kill :1
输出如下:
Killing Xvnc process ID 19681
四、配置 VNC 服务器
现在 Gnome 和 TigerVNC 都被安装在远程 CentOS 机器上,下一步就是配置 TigerVNC 去使用 Gnome。VNC 服务器使用~/.vnc/xstartup
文件,在创建新桌面的时候,启动应用。打开这个文件:
vim ~/.vnc/xstartup
并且编辑如下:
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &
保存并且关闭文件。当你启动或者重启 TigerVNC 服务器的时候,上面的脚本将会被自动执行。
如果你想传递额外的选项给 VNC 服务器,打开~/.vnc/config
文件,并且每行添加一个选项。最常用的选项都被列在文件中。取消注释,并且按照你的喜好来修改。
这里是一个例子:
# securitytypes=vncauth,tlsvnc
# desktop=sandbox
geometry=1920x1080
# localhost
# alwaysshared
五、创建一个 Systemd Unit 文件
Unit files 允许你很容易地启动,停止,和重启服务。通常情况下,存储用户 unit 文件的最好位置是~/.config/systemd/user
。创建文件夹:
mkdir -p ~/.config/systemd/user
拷贝默认的 vncserver unit 文件:
cp /usr/lib/systemd/user/vncserver@.service ~/.config/systemd/user/
通知 systemd,一个新的用户 unit 文件已经存在:
systemctl --user daemon-reload
启动 VNC 服务,并且启用开机启动:
systemctl --user enable vncserver@:1.service --now
在@:
后面的数字1
定义了 VNC 服务将会监听的显示端口,我们将会使用1
,这意味着 VNC 服务器将会监听我们在前面讨论过的5901
端口。
启用 lingering 以便在用户没有登录时,用户服务可以保持开机启动并且保持运行状态。
loginctl enable-linger
验证服务是否成功启动,运行:
systemctl --user status vncserver@:1.service
● vncserver@:1.service - Remote desktop service (VNC)
Loaded: loaded (/home/linuxize/.config/systemd/user/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-01-30 22:14:08 UTC; 2s ago
Process: 20813 ExecStart=/usr/bin/vncserver :1 (code=exited, status=0/SUCCESS)
Process: 20807 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
CGroup: /user.slice/user-1000.slice/user@1000.service/vncserver.slice/vncserver@:1.service
...
六、连接到 VNC 服务器
VNC 不是一个加密协议,并且可以被包嗅探工具定位分析。推荐的访问方式,就是从你本地机器的5901
端口到远程服务器的同一个端口之间 创建一个 SSH 隧道。
6.1 在 Linux 和 macOS 系统上设置 SSH 隧道
如果 你在你的机器上运行着 Linux,macOS 或者其他类Unix 操作系统,你可以很容易地使用下面的 ssh 命令来创建一个隧道:
ssh -L 5901:127.0.0.1:5901 -N -f -l username remote_server_ip
你将会被提示输入用户密码。
不要忘记将username
和server_ip_address
替换成你自己的用户名和远程服务器 IP 地址。
6.2 在 Windows 上设置 SSH 隧道
Windows 上使用 Putty 来设置 SSH 隧道。
打开 Putty 并且在Host name or IP address
文本域处输入你的服务器 IP 地址。
在Connection
菜单下,展开SSH
并且选择Tunnels
。在文本域Source Port
处输入 VNC 服务器端口(5901
),在文本域Destination
处输入server_ip_address:5901
,并且像下图一样点击Add
按钮:
返回Session
页面保存设置,以便你不用每次都需要输入它们。想要登录远程服务器,选择保存的会话,并且点击Open
按钮.
6.3 使用 Vncviewer 进行连接
想要连接你的远程服务器,打开你的 VNC 查看器并且输入localhost:5901
。
你可以使用任何 VNC 查看器,例如: TigerVNC, TightVNC, RealVNC, UltraVNC, Vinagre, 和 VNC Viewer for Google Chrome。
我们使用 TigerVNC:
出现提示的时候,输入密码,你将会看到默认的 Gnome 桌面。它应该像下面这样:
就这些!现在你已经可以从你的本地机器上使用你的键盘和鼠标,在你的远程桌面上进行工作。
七、 总结
我们已经向你展示,如何在一个远程的 CentOS 8 机器上设置一个 VNC 服务器并且连接上去。
想要为多用户创建显示器,重复同样的步骤。创建初始化配置,使用vncserver
命令设置密码,并且使用不同的端口创建一个新服务。
如果你有任何疑问,请通过以下方式联系我们:
微信: sn0wdr1am86
微信群:
加上面的微信,备注微信群
QQ: 3217680847
QQ 群: 82695646