OCI 控制台连接 CLI 踩坑
用 OCI CLI 在 Cloud Shell 创建并使用串口控制台连接时的若干具体报错与绕过方法。
[!info] 定位 本文记录用 CLI 走串口控制台时的具体坑。完整恢复流程见 使用控制台连接恢复 OCI 实例。
OCI 控制台连接 CLI 踩坑
坑 1:compartment list 查不到实例所在 compartment
oci iam compartment list 默认不列根 compartment(即 tenancy 本身)。若实例直接建在 tenancy 根下,用该命令找不到 compartment-id。
绕过:直接用 tenancy OCID 作为 compartment-id,或从控制台实例详情页「一般信息 → OCID」点复制按钮拿实例 OCID(最快)。
坑 2:参数名是 —ssh-public-key-file
创建控制台连接时上传公钥的参数是 --ssh-public-key-file,不是 --public-key-file,后者报 No such option:
oci compute instance-console-connection create \
--instance-id <OCID> \
--ssh-public-key-file ~/.ssh/id_rsa.pub
坑 3:ssh-rsa 算法与新版 OpenSSH 不兼容
连接控制台时报 Permission denied (publickey),-v 日志里有关键一行:
debug1: send_pubkey_test: no mutual signature algorithm
原因:InstanceConsoleSSHD 用 ssh-rsa(SHA-1)签名,而新版 OpenSSH(8.8+)默认禁用。需要在命令里重新启用。注意参数名随版本不同:
- 新版 OpenSSH:
-o PubkeyAcceptedAlgorithms=+ssh-rsa - 老版 OpenSSH(如 Cloud Shell 的 8.0):
-o PubkeyAcceptedKeyTypes=+ssh-rsa(用新参数名会报Bad configuration option)
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa \
-i ~/.ssh/id_rsa \
-o ProxyCommand='ssh -W %h:%p -p 443 <console-connection-ocid>@instance-console.<region>.oci.oraclecloud.com' \
ubuntu@<instance-ocid>
坑 4:串口控制台 OS 登录需要密码
SSH 认证通过后,串口把键盘输入直接送到实例的 ttyS0,出现的是操作系统 login 提示符。但 Oracle 的 Ubuntu 镜像默认 ubuntu 用户没有设置密码(仅 SSH key),所以 login: ubuntu 之后输任何密码都不对。
结论:串口控制台对无密码用户走不通。改用 VNC 控制台,或直接 oci compute instance action --action SOFTRESET 重启实例(可清掉 fail2ban 等非持久封禁)。
坑 5:Cloud Shell 粘贴多行命令丢续行符
Cloud Shell 终端粘贴带 \ 续行的多行命令时,换行符可能被吃掉,导致参数错位、报 Got unexpected extra argument。复杂 OCI 查询应拆成单行命令分步执行。
Related notes
- 完整恢复流程:使用控制台连接恢复 OCI 实例
- 所属 MOC:甲骨文云服务器 MOC
- 常见触发场景:Fail2ban 误封导致 SSH 连接被立即关闭