在Amazon Linux 2安装Mate图形桌面并使用VNC远程连接

一、背景

Linux EC2用于GPU等场景下需要安装GUI图形桌面,常见的有KDE、Gnome、XFCE等。本文描述了如何在Amazon Linux 2上安装Mate图形桌面,并使用VNC远程连接。本文在中国区测试通过。

二、安装和配置

1、安装GUI和VNC

请确认系统是Amazon Linux 2系统,本文调用了Amazon Linux 2专用软件仓库,在CentOS7上是无法安装的。

注意:如下命令执行时候需要在ec2-user用户提示符下,不要sudo成root,因为后续安装脚本有很多是以ec2-user身份编写,使用root安装将直接报错无法启动服务。

执行如下命令。

sudo amazon-linux-extras install mate-desktop1.x -y
sudo bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'
echo "/usr/bin/mate-session" > ~/.Xclients && chmod +x ~/.Xclients
sudo yum install tigervnc-server -y
vncpasswd

现在界面将提示设置VNC Password。VNC Password分成管理员密码,和View-only只观看密码。这里我们设置一个管理员密码,并且停用View-only观看用户。输入密码时候注意复杂度,需要8位以上,含特殊字符,并输入两遍确认。输入两遍之后,当提示是否设置View-only密码时候,输入N,不设置观看用户。

设置效果如下截图。

至此安装完成。

2、初始化服务并设置自动启动

执行如下命令。

vncserver :1
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
sudo sed -i 's/<USER>/ec2-user/' /etc/systemd/system/vncserver@.service
sudo systemctl daemon-reload
sudo systemctl enable vncserver@:1
sudo systemctl start vncserver@:1

执行完毕效果如下。

至此初始化完成。

三、连接到VNC

1、下载客户端

VNC是开源协议,支持Windows、Linux、Unix,有多种客户端,常见的包括RealVNC、UltraVNC、TightVNC等。

以TightVNC为例,下载地址在这里。在这个网址上,Windows有直接下载客户端的提示,MacOS则需要下载“TightVNC Java Viewer”,这是一个Jar包,可以直接在MacOS运行,即可启动图形界面的VNC客户端。

此外,还可以使用MacOS自带的客户端。

以下三种方法任选其一即可。

2、直接公网连接方式

上文启动的VNC服务器端运行在 :1 端口,这个含义是在VNC基础端口5900上的第一个用户桌面,因此连接端口就是5901。

从公网连接,需要去EC2控制台上,找到安全规则组,放行TCP协议5901端口,允许来自特定IP或者0.0.0.0/0的远程连接。(注意,设置为0.0.0.0不安全,尽量设置为本公司的固定出口IP地址)

然后启动VNC客户端,输入EC2对应的Public IP地址或者EIP,也就是公网P地址:5901即可登录。

3、公网连接SSH端口并建立端口转发到本机方式

使用SSH隧道映射是经常使用的一种安全手段,适合于防火墙仅开放了22端口的场景,包括一些办公网络,如AWS员工VPN办公网络,如北京联通部分光纤宽带,是限制了对公网IP 5901端口的访问。此时连接公网IP,将收到连接超时的错误。解决办法是,设置SSH端口转发。本方法对中国区适用,对于连接海外的EC2 SSH效果很差,可能因为国际互联网问题无法连接或者随时中断。

以MacOS为例。退出刚在安装软件的SSH远程连接。重新发起一个新的远程登录,参数如下。

ssh -L 5901:localhost:5901 -i EC2登录PEM证书文件 ec2-user@公网IP

请替换以上命令的证书和公网IP。执行命令后,SSH登录成功,界面上不会有任何额外的提示就是登录正常成功了。如下截图。

接下来就可以启动客户端登录了。回到MacOS上,用鼠标点击桌面,然后从任务栏上选择Go,从下拉框中找到 Connect to Server的按钮。这个快捷键是Command+K,也可以使用快捷键操作。如下截图。

在MacOS自带的客户端界面上,输入如下地址:

vnc://127.0.0.1:5901

此时还可以点击左下角的加号,将这个服务器地址保存下来,后续方便调用。如下截图。

随后会提示输入密码,此时输入前文配置vncpasswd时候设置的密码,即可正常连接。如下截图。

使用过程中需要注意,SSH不能中断,否则映射过来到本机127.0.0.1:5901的隧道就会中断,也就不能连接了。

为了使用方便,可以自行修改shell下的环境变量、alias等,实现比较友好的自动登录。也可以使用第三方SSH隧道管理工具,自动映射端口。

4、Session Manager转发方式

当要连接的EC2在海外时候,受到网络影响,直接的SSH可能无法建立转发。此时可以用Session Manager进行转发。请参考本篇博客。本篇博客讲解的是转发3389 RDP协议,请替换其中的端口为5901即可。

例如构建命令:

aws ssm start-session \
    --target i-0d32a082d6930a10a \
    --region ap-southeast-1 \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["5901"], "localPortNumber":["56789"]}'

替换EC2的ID(从EC2界面查看),替换Reigon区域,替换端口号,然后用VNC软件连接本机的56789端口,即可连接到VNC。

四、安装简单桌面软件

1、找到SSH Console

在Mate图形环境上,点击菜单,即可找到Console选项。如下截图。

2、安装Chromium浏览器等软件

执行如下命令安装浏览器。

sudo amazon-linux-extras install epel

执行本命令完毕后,要等待1分钟左右,等后台yum进程退出。然后在执行如下命令安装。

sudo yum install chromium -y

至此配置完成,具备图形界面和浏览器,可以继续其他配置操作。如下截图。

全文完。

四、参考文档

如何在运行 Amazon Linux 2 的 Amazon EC2 实例上安装 GUI?

https://repost.aws/zh-Hans/knowledge-center/ec2-linux-2-install-gui