PVE终RockyLinux如何开启xterm控制台

缘由

在PVE中安装了RockyLinux,已经可以通过ssh进行连接了。但有时候不在内网环境内,我又不喜欢将内网的Linux SSH端口直接暴露在外网,通过PVE远程控制是我比较喜欢的做法,至于PVE WEB暴露在公网上的安全性问题,我是用2FA解决。

但PVE WEB操作linux很不方便的一点是不支持复制粘贴,因为默认的控制台使用的是noVPC。为了支持复制粘贴需要支持xterm.js

设置

教程参见Serial_TerminalEnable Serial Console for Rocky Linux / CentOS / RHEL in Proxmox

为虚拟机设置串口

在宿主机上输入

1
qm set vmid -serial0 socket

或者在web界面配置

配置串口(一般网上教程会跳过的地方)

复制ttyS0服务

1
cp /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/serial-getty@ttyS0.service

修改serial-getty@ttyS0.serviceExecStart改为如下

1
-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM

将串口设置自启动

1
2
3
4
5
ln -s /etc/systemd/system/serial-getty@ttyS0.service /etc/systemd/system/getty.target.wants/

systemctl daemon-reload
systemctl start serial-getty@ttyS0.service
systemctl enable serial-getty@ttyS0.service

更新Grub

修改/etc/default/grub中的GRUB_CMDLINE_LINUX

1
GRUB_CMDLINE_LINUX="quiet console=tty0 console=ttyS0,115200" 

若原本GRUB_CMDLINE_LINUX已经有内容,则将其添加最后即可

刷新grub

1
grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"

最后重启即可

注意点

一开始我按着中文资料做了好几回都不成功,是用dmesg | grep ttyS进行搜索,ttyS0也是存在的,xterm控制台能打开但一直卡在starting serial terminal on interface serial0不动,按网上说的按Enter也没反应。当时想肯定是ttyS0有问题,只是linux基础比较薄弱,最后找到设置中的第二篇教程才设置成功

题外话

当然,也可以使用异地组网来解决我最开始的问题。但异地组网方案像zerotier,为了保证稳定性最好自建planet。自建planet异地组网安全性比内网穿透暴露pve web更高(仅对你本人而言),只是如果你经常去网络管理比较完善的单位,被运维识别出来就比较尴尬了。