甲骨文云 VPS 无法通过密钥登录怎么重置密码

文章导读
如果甲骨文云 Linux 实例无法通过 SSH 密钥登录,最稳妥的官方恢复方式是通过控制台的“串行控制台连接”(Console Connection)进入系统,然后手动重置密码或修复密钥配置。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 安全加固:重置后恢复密钥登录
  5. 怎么验证是否生效
  6. 常见坑
  7. 参考来源
A A

如果甲骨文云 Linux 实例无法通过 SSH 密钥登录,最稳妥的官方恢复方式是通过控制台的“串行控制台连接”(Console Connection)进入系统,然后手动重置密码或修复密钥配置。

先说结论:甲骨文云 Linux 实例默认不支持控制台直接重置密码,需通过串行控制台获取 shell 权限后手动修改。

  • 先确认:安全列表和网络安全组是否放行了 22 端口,本地密钥文件权限是否正确。
  • 先处理:生成本地 SSH 密钥对用于控制台访问,在 OCI 控制台创建串行控制台连接并上传公钥。
  • 再验证:通过串行控制台登录后,使用 passwd 命令重置密码并检查 SSH 配置,完成后建议关闭密码登录。

命令速用版

如果你能通过串行控制台进入系统,以下是重置用户密码和检查 SSH 配置的常用命令:

# 重置 opc 或 ubuntu 用户密码
sudo passwd opc

# 检查 SSH 服务状态
sudo systemctl status sshd

# 临时开启密码登录(仅限排查期间)
sudo vi /etc/ssh/sshd_config
# 确保 PasswordAuthentication yes
# 修改前建议备份:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 检查配置语法:sudo sshd -t
sudo systemctl restart sshd

为什么会这样

甲骨文云 Linux 实例在创建时通常只允许 SSH 密钥对登录,默认关闭了密码认证。无法登录常见原因有三类:一是本地私钥文件权限过于开放导致 SSH 客户端拒绝使用;二是实例内部 SSH 配置被误改,禁用了密钥认证;三是甲骨文云控制台的安全列表(Security List)或网络安全组(NSG)阻断了 22 端口。此外,实例内部的防火墙(如 firewalld 或 ufw)也可能拦截连接。由于没有预留密码,一旦密钥失效,必须通过带外管理方式进入系统。

分步处理

1. 排查本地网络与密钥

先确认本地 SSH 命令是否正确。私钥文件权限必须是 600,否则 SSH 客户端会报错忽略密钥。

chmod 600 ~/.ssh/id_rsa
ssh -i ~/.ssh/id_rsa opc@<实例公网 IP>

如果提示 Permission denied 或 Connection timed out,继续下一步。

2. 生成控制台连接专用密钥

串行控制台连接需要独立的 SSH 密钥对,不要与实例登录密钥混用。在本地终端生成:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/oci_console_key
# 将公钥内容复制备用
cat ~/.ssh/oci_console_key.pub

3. 创建串行控制台连接

登录甲骨文云控制台,进入实例详情页。在“资源”菜单下找到“串行控制台连接”(Console Connections)。点击“创建串行控制台连接”,上传上一步生成的公钥内容。创建完成后,复制显示的 SSH 命令。

4. 通过控制台登录系统

甲骨文云 VPS 无法通过密钥登录怎么重置密码

在本地终端运行复制的 SSH 命令(需指定刚生成的私钥),这会连接到实例的串行控制台。如果实例处于停止状态,需先启动实例。连接成功后,你将获得一个 root 或普通用户的 shell 界面。

ssh -i ~/.ssh/oci_console_key ocid1.instanceconsoleconnection.oc1...@console.us-phoenix-1.oraclecloud.com

5. 重置密码与修复配置

在控制台 shell 中,使用 passwd 命令重置目标用户密码。如果需要临时启用密码登录排查问题,编辑/etc/ssh/sshd_config,将 PasswordAuthentication 改为 yes。

注意:修改配置后务必执行 sudo sshd -t 检查语法,确认无误后再重启服务,防止配置错误导致 SSH 服务无法启动。

sudo passwd opc
sudo vi /etc/ssh/sshd_config
# 修改 PasswordAuthentication yes
sudo sshd -t
sudo systemctl restart sshd

安全加固:重置后恢复密钥登录

密码登录仅作为临时恢复手段,长期开启会增加被爆破风险。确认能通过密码或修复后的密钥登录后,建议立即关闭密码认证。

# 再次编辑配置
sudo vi /etc/ssh/sshd_config
# 改回 PasswordAuthentication no
# 确保 PubkeyAuthentication yes
sudo sshd -t
sudo systemctl restart sshd

怎么验证是否生效

退出串行控制台连接,尝试使用新密码或修复后的密钥通过 SSH 登录实例。

ssh opc@<实例公网 IP>

如果启用密码登录,使用密码尝试连接。登录成功后,建议再次检查/var/log/secure 或/var/log/auth.log 日志,确认没有异常认证失败记录。如果之前是安全组问题,此时应能正常连接。

常见坑

1. IAM 权限不足:创建串行控制台连接需要特定的 IAM 策略权限,如果子账号操作失败,需检查是否拥有 instance-console-connection 的使用权限。

2. SSH 配置语法错误:在修改 sshd_config 时,如果语法有误导致 sshd 服务无法启动,再次重启实例后将无法通过任何方式 SSH 登录,只能通过控制台修复。

3. 安全组未放行:即使密码重置成功,如果甲骨文云控制台的安全列表或 NSG 未放行 22 端口,依然无法连接。

4. 默认用户名称:不同镜像默认用户不同,Oracle Linux 通常是 opc,Ubuntu 是 ubuntu,CentOS 可能是 opc 或 centos,登录时需注意。

参考来源

  • Oracle Cloud Infrastructure Documentation - Using a Console Connection to Troubleshoot an Instance, URL: https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/accessinginstance.htm#Using_a_Console_Connection_to_Troubleshoot_an_Instance
  • Oracle Cloud Infrastructure Documentation - Troubleshooting SSH Issues, URL: https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/troubleshootingssh.htm