为了统一访问界面,我之前将家里的设备统一到了 Guacamole 访问,这样通过隧道在有网络的环境我就可以访问家里设备。
这样就不用收到设备端的限制,随时随地访问,维护起来也很方便。最近新装了 Ubuntu 到老电脑,计划采取 3 种方式访问:SSH、VNC、RDP。但在配置过程中遇到了些坑,网上没有现成的教程或者问题解决办法,也是搜索尝试了很多次才搞定,所以记录一下免得下次忘记了 :joy:
我安装的 Ubuntu 具体版本信息如下:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
主要按 Ubuntu 端、Guacamole 端分别需要配置和注意事项来记录
1. Ubuntu 端需要作的配置
1.1. 安装并配置 SSH 服务端
Ubuntu 默认没有安装 ssh 服务端,所以首先得安装个服务端。使用以下命令:
sudo apt update
sudo apt install openssh-server
安装成功后使用如下命令查看 ssh 状态信息,包括端口信息。
sudo systemctl status ssh
接着在防火墙打开 SSH 服务监听端口,默认是 22。
sudo ufw allow 22/tcp
一般来讲,Ubuntu 配置到这里就可以了,但是在 Guacamole 端配置的时候有些坑。由于 Guacamole 支持的协议 ssh-dss、ssh-rsa 早就因为安全考虑被 Ubuntu 舍弃支持了,所以直接配置后根本无法链接访问。
使用 sudo systemctl status ssh 可以查看到错误提示:
no matching host key type found. Their offer: ssh-rsa ssh-dss
当然也有解决办法,就让我们的 SSH 服务端支持 Guacamole 提供的协议,这样两者就能对话了。
由于我的服务器和设备都在家庭内网,所以不用考虑安全问题,直接使用链接是没有问题的,如果实在外网环境可以自行评估安全性需求。
经过一番搜索,发现在 Ubuntu 端修改 SSH 服务的配置的方法具体如下(熟悉 ssh 服务配置的同学可能就用不着搜索,我不太熟):
sudo vim /etc/ssh/sshd_config
打开后在文末加入 HostKeyAlgorithms +ssh-rsa 内容就可以了。
2023 年 2 月 26 日补充
今天在 AWS 上部署了一台 Ubuntu 22.04. 在使用 Guacamole 链接时用的是 Private Key,当然失败很多次。深刻体会了一把问对问题的重要性。
我在 Google 上搜索的都是“Guacamole ssh aws” “guacamole ssh aws Log in failed.”等等类型的问题,没有问出问题的实质:
Cannot Connect via SSH to Ubuntu 22.04 Machines With Private Key
偶然点开一个回答这个问题的网页之后才恍然大悟,然后按照操作就解决了我搜索了将近 2 个小时的问题,可见对于自己不了解的领域,寻找问题答案的关键是问对问题的实质。
具体的解决办法就是在前述的步骤多加一行:
PubkeyAcceptedKeyTypes +ssh-rsa
不加这一行只能保证我们可以通过密码访问,但是加了之后就是解决了 keypair 访问时版本不兼容的问题。也可以用一串命令行脚本快速实现上述修改操作并重启 ssh 服务:
sudo echo -e “PubkeyAcceptedKeyTypes +ssh-rsa\nHostKeyAlgorithms +ssh-rsa” >> /etc/ssh/sshd_config&&systemctl restart ssh
1.2. 配置 VNC/RDP 共享访问
由于这一版的 gnome 增加了 remote desktop 工具设置,所以我就偷懒直接用了,当然缺点就是和显示器共享屏幕,如果显示器息屏了就没得信号了,由于我主要使用 ssh 连接,所以这种缺点我暂时能接受,当然也可以将在设置中禁止息屏,只是会更费电。重新安装配置个 vnc 服务端很麻烦,我就将就使用了。
直接在设置中打开 共享, 里面有个远程桌面,开启后设置密码就可,务必勾选 Enable Legacy VNC Protocol ,原因是 Guacamole 的协议是比较老的,而且要点击右侧三个点并选择需要密码,默认的是第一次链接需要确认,会导致每次重启需要在物理机上手动确认通过 vnc 链接,非常不适合经常性的 vnc 链接访问。注意在最后设定自己的访问密码,和系统密码是独立的,配置后的信息如下图。
2. Guacamole 端访问链接配置注意事项
其实在 Ubuntu 端配置后,已经填好了坑,基本上就可以了,主要需要注意的就是端口和 vnc 的
2.1. SSH 访问配置
默认端口是 22,用户名密码分别是系统登录用户的用户名密码。没有其他特殊配置,填好后直接链接就行。
2.2. VNC、RDP 访问配置
这两种方式是是图形界面远程访问,VNC、RDP 的服务监听端口分别是默认的 5900 和 3389。后者甚至可以让我们在通过 Windows 的远程桌面来访问 Ubuntu。我主要使用 VNC,不知道什么原因,我在配置连接的界面将 GUACAMOLE PROXY PARAMETERS (GUACD) 里的 Encryption 设置为 None(unencrypted) 才连接成功,知道的同学可以留下评论,不胜感激。
由于 Ubuntu 的远程专门是通过一个叫 gnome-remote-de 的服务来驱动的,可以在 shell 里查询其监听的端口,包括已建立的链接,效果如图:
由于 Guacamole 在统一多设备访问窗口以及远程访问方面太优秀了,我打算之后专题记录下有关的配置使用方法,欢迎熟悉这方面的同学留言你的经验。
3. 其他可能需要注意的设置
3.1. 重启后 Remote 访问密码被重置
由于 Ubuntu 22.04 在安全方面默认有一个钥匙环(keyring)工具使用用户名密码来加密系统内所有的用户名和密码,所以在使用 VNC、RDP 的时候,每次 reboot 后由于 VNC 和 RDP 的的访问密码在keyring中处于加密状态,VNC 或 RDP 服(gnome-remote-de)无法读取到密码值,所以会随机设置一个密码,结果就是 reboot 之后原先设置的访问密码失效,导致无法访问,解决办法也比较简单粗暴,就是取消keyring的加密,让系统启动后 VNC 服务能直接读取到我们设置的访问密码,这种就不会每次 reboot 重置密码了,当然这也就损失了一层密码保护,还是要评估使用环境,我在家庭内网环境更多考虑便利性,所以可以接受这个方案,搜索了网上很多帖子,貌似也目前也只能这么做来防止重置。具体就是在依次打开设置 - 工具 -Password and Keys,右击 Default Keyring,选择 change password,修改后的密码留空,重启后生效(重启前确认已经设置了自己的 VNC、RDP 访问密码)。
3.2. 笔记本合盖后锁屏注销
一般来讲笔记本盒盖后默认是注销登录或锁屏的,这也会导致 SSH 或远程 VNC、RDP 异常,解决办法就是配置合盖选项,由于图形界面的设置找不到该选项,所以使用命令来设置下。具体如下:
sudo vim /etc/systemd/logind.conf
找到 #HandleLidSwitch=suspend,然后去掉注释符号(#),并修改值为 ignore。
HandleLidSwitch=ignore
最后重启系统或者 执行 sudo restart systemd-logind 命令即可生效。