甲骨文云 VPS 重置 SSH 密钥后无法登录,通常是因为操作系统默认用户名不匹配、cloud-init 初始化脚本执行失败或 VCN 安全列表阻断了 22 端口。最可靠的恢复方案是通过实例控制台连接(Console Connection)手动修复 authorized_keys 文件。
先说结论:控制台重置密钥依赖 cloud-init 成功运行,若实例状态异常或用户名错误,重置将无效,需改用 VNC 控制台介入。
- 先确认:登录用户名是否与镜像匹配(Ubuntu 用 ubuntu,Oracle Linux 用 opc)。
- 先处理:检查 VCN 安全列表和网络安全组是否放行 TCP 22 端口。
- 再验证:使用 ssh -vvv 命令区分是连接超时还是密钥认证失败。
命令速用版
本地终端执行以下命令检查密钥权限和连接详情,快速定位是网络问题还是认证问题。
chmod 600 /path/to/private_key
ssh -vvv -i /path/to/private_key username@instance_ip若返回 Permission denied (publickey),说明密钥未注入或用户名错误;若返回 Connection timed out,说明安全列表或防火墙阻断。
为什么会这样
控制台重置密钥功能本质是向实例发送元数据指令,依赖实例内部的 cloud-init 服务拉取新密钥并写入 ~/.ssh/authorized_keys。
如果实例处于运行状态但 cloud-init 服务僵死、操作系统镜像不支持动态密钥注入或网络元数据服务不可达,新密钥就不会生效。此外,甲骨文云不同镜像的默认登录用户名不同,使用错误用户名会导致即使密钥正确也被拒绝登录。安全列表规则优先级高于实例内部设置,若 VCN 层面阻断 22 端口,密钥重置再成功也无法连接。
分步处理
按顺序执行以下操作,每一步完成后尝试登录,避免过度操作导致实例状态混乱。
1. 核对默认用户名
根据实例镜像类型确认用户名,Ubuntu 镜像默认为 ubuntu,Oracle Linux 默认为 opc,CentOS 默认为 opc 或 centos。使用错误用户名是重置密钥后无法登录的高频原因。
2. 检查网络安全规则
登录甲骨文云控制台,进入实例详情页面的虚拟网络接口卡(VNIC)链接,检查关联的安全列表(Security List)和网络安全组(NSG)。确保存在一条源地址为 0.0.0.0/0(或你的 IP)、目的地端口为 22、协议为 TCP 的入站规则。
3. 执行控制台重置(需停机)
若实例允许停机,先在控制台停止实例。在实例详情页选择更多操作中的重置 SSH 密钥,上传新公钥后启动实例。停机状态下重置可避免 cloud-init 运行时竞争问题,提高注入成功率。
4. 使用实例控制台连接
若上述方法无效,在实例详情页找到实例控制台连接(Instance Console Connection)。创建连接后,通过 VNC 方式登录实例内部。手动编辑 ~/.ssh/authorized_keys 文件,将本地公钥内容粘贴进去,并确保文件权限为 600,所属用户正确。
怎么验证是否生效
通过本地 SSH verbose 模式和实例内部日志双向验证。
本地验证:执行 ssh -vvv 命令,观察输出日志。若看到 Authentication succeeded,说明密钥已生效。若停留在 Connecting 阶段,说明网络不通。若看到 Offered publickey 后接 Permission denied,说明密钥不匹配或用户名错误。
内部验证:通过 VNC 控制台登录实例后,查看 /var/log/auth.log(Ubuntu/Debian)或 /var/log/secure(Oracle Linux/CentOS)。确认 SSH 服务是否正常接收请求,是否有 Accepted publickey 记录。
常见坑
以下场景容易导致重置密钥操作看似成功但实际无法登录,操作时需谨慎。
- 密钥权限过宽:本地私钥文件权限若为 644 或 777,SSH 客户端会拒绝加载密钥,报错 WARNING: UNPROTECTED PRIVATE KEY FILE。
- 安全列表继承:子网级别的安全列表规则会作用于实例,仅修改实例关联的 NSG 可能不够,需同时检查子网安全列表。
- Cloud-init 锁文件:若实例频繁重置密钥,cloud-init 可能因锁文件存在而跳过后续配置,需通过 VNC 清理 /var/lib/cloud/instances/ 下的缓存。
- 防火墙软件拦截:实例内部安装的 firewalld 或 ufw 若未放行 22 端口,会阻断连接,这与云平台安全列表无关。
常见问题
甲骨文云 Ubuntu 镜像默认登录用户名是什么?
Ubuntu 镜像的默认登录用户名是 ubuntu,不是 root 或 admin。
重置 SSH 密钥是否需要停止实例?
运行状态下重置依赖 cloud-init 支持,成功率不稳定;停止实例后重置可确保密钥在启动时注入,成功率更高。
实例控制台连接是否收费?
实例控制台连接功能本身免费,但通过该连接产生的数据传输按标准网络费率计费,操作完成后建议删除连接以避免潜在费用。
参考来源
- Oracle Cloud Infrastructure Documentation, "Accessing Your Instance", https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/accessinginstance.htm
- Oracle Cloud Infrastructure Documentation, "Instance Console Connection", https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/managingconsoleconnections.htm