如果甲骨文云 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.pub3. 创建串行控制台连接
登录甲骨文云控制台,进入实例详情页。在“资源”菜单下找到“串行控制台连接”(Console Connections)。点击“创建串行控制台连接”,上传上一步生成的公钥内容。创建完成后,复制显示的 SSH 命令。
4. 通过控制台登录系统
在本地终端运行复制的 SSH 命令(需指定刚生成的私钥),这会连接到实例的串行控制台。如果实例处于停止状态,需先启动实例。连接成功后,你将获得一个 root 或普通用户的 shell 界面。
ssh -i ~/.ssh/oci_console_key ocid1.instanceconsoleconnection.oc1...@console.us-phoenix-1.oraclecloud.com5. 重置密码与修复配置
在控制台 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