修复迁移之后无法正常启动的 Oracle Cloud VM
昨天收到了 Oracle Cloud 的邮件,大意是「你有一台虚拟机的母鸡需要升级一下,我们给你安排了计划迁移,你也可以现在就上来手动重启一次完成迁移」。反正上面也没跑什么重要的东西,不如我现在手动迁移一下。
没想到这一重启,机器就直接失联。要命的是,以前我常用的 VNC 连接还问题不断,最终也是没能成功使用。
今天继续研究了一会儿,终于找回了失联的虚拟机。
症状
- 迁移后虚拟机无响应
- Ping 不通,SSH 自然也不通
- 无法通过「控制台连接」提供的「本地连接」使用 VNC 方式连接到虚拟机
- 较旧的加密方式不受新版 OpenSSH 支持,可以通过添加参数缓解
- 第一层跳板机经过调试后可以成功连接
- 第二层 VM 无法连接:
Permission denied (publickey).
试图 VNC,拼尽全力无法战胜……?
Updated 2025/02/22: 经测试,可以使用旧版 OpenSSH 建立连接。并非无法战胜!
使用的是 Win32 port of OpenSSH v8.1.0.0p1-Beta(更高或者更低的版本我也懒得测试了,anyway it works for me™),可以成功建立端口转发,然后使用 VNC Viewer 连接到 VM 的 VNC。
1 | .\ssh-keygen -t rsa -f .\data\vnc_id_rsa |
但是复活 VNC 也是我修好 VM 之后的事了,修的时候还是拿下面的另一种方法修的。
首先还是要想办法连上去。
如果你遇到 Unable to negotiate with UNKNOWN port 65535: no matching host key type found. Their offer: ssh-rsa
提示,你可以在 SSH 命令中加入 -o HostKeyAlgorithms=+ssh-rsa
来缓解。
如果你想指定私钥的位置(比如你刚使用 ssh-keygen
在当前文件夹生成了一个 vnc-key
,并且把 vnc-key.pub
拿去用了;注意 Oracle Cloud 的控制台连接确实只支持 RSA,就别浪费时间搓 ed25519 了),则使用 -i <path/to/private/key>
。
融合了以上两处的修改命令如下:
1 | -ssh -o ProxyCommand='ssh -W %h:%p -p 443 ...' ... |
此时应该能正常连接到跳板机,但是通过跳板机连接到 VM 时会出现 Permission denied (publickey).
,目前我不知道怎么解决 已解决,见上。
Cloud Shell
既然本地连接不行,那 Oracle 提供的懒人一键包 Cloud Shell 行不行呢?答案是:至少还能用。
启动一个 Cloud Shell 连接,此时发现,其实机器没死,只是卡在了 UEFI Shell 没有自动引导进系统。
可以顺便测试一下网络:ifconfig -s eth0 dhcp
就发现成功拿到了 IP 地址,也能从外界 ping 通了。
进入系统
我使用 netboot.xyz 重装过这台 VM 的系统为 Debian 12,所以我要做的很简单:
1 | fs0: |
就可以引导系统了。但是这样治标不治本,如果再重启一次,VM 还是会卡在 UEFI Shell。
修复 EFI 引导项
使用 sudo efibootmgr -v
查看当前的 EFI 引导项,发现这台机器上的 debian
引导项是缺失的。重建一下:
1 | sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck |
重建之后再看看 efibootmgr -v
的输出:
1 | BootCurrent: 0004 |
重启测试,正常自动引导进入系统。虽然 VNC 还是连不上,但是至少寻回了失联小鸡。
唉我操 Oracle 怎么他妈的这么坏啊
(真实存在.webp)
修复迁移之后无法正常启动的 Oracle Cloud VM
https://xyx.moe/026-Fix-Oracle-Cloud-VM-after-migration.html