甲骨文云防火墙规则配置错误导致无法 SSH 怎么办?

文章导读
遇到甲骨文云实例无法 SSH 连接,最优先的操作是登录 OCI 控制台检查安全列表(Security List)和网络安全组(NSG)的入站规则,若完全无法网络访问,则通过实例控制台连接(Instance Console Connection)进入系统修复。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

遇到甲骨文云实例无法 SSH 连接,最优先的操作是登录 OCI 控制台检查安全列表(Security List)和网络安全组(NSG)的入站规则,若完全无法网络访问,则通过实例控制台连接(Instance Console Connection)进入系统修复。

先说结论:大多数 SSH 连接失败是因为云端安全规则或系统内部防火墙拦截,先检查控制台网络配置,再排查系统内部设置,必要时使用串口控制台救援。

  • 先确认:OCI 控制台安全列表是否放行 TCP 22 端口
  • 先处理:若网络规则无误,通过实例控制台连接登录系统检查内部防火墙
  • 再验证:修复后尝试 SSH 连接并检查端口监听状态

快速处理思路

由于此时无法通过 SSH 执行命令,首要任务是通过云控制台恢复访问权限。以下是紧急恢复的逻辑顺序:

  1. 登录 OCI 控制台,找到实例详情页。
  2. 检查“虚拟云网络”下的安全列表(Security Lists)和网络安全组(NSG)。
  3. 若确认云端规则无误但仍无法连接,创建“实例控制台连接”(Instance Console Connection)。
  4. 通过串口登录系统,检查并修改内部防火墙配置或 SSH 服务状态。

为什么会这样

甲骨文云的网络访问控制分为两层。第一层是云基础设施层面的安全列表和网络安全组,它们相当于云数据中心交换机上的访问控制列表,数据包在进入虚拟机之前就会被拦截。第二层是操作系统内部的防火墙(如 iptables、firewalld 或 ufw),即使云端规则放行,系统内部拒绝也会导致连接失败。配置错误通常发生在修改了默认规则、误删了入站规则,或者系统更新后防火墙策略重置。

分步处理

步骤一:检查 OCI 控制台安全规则

登录 OCI 控制台,进入实例详情页面,点击子网链接查看关联的安全列表。确认是否存在一条入站规则(Ingress Rules),源类型为 CIDR,源值为 0.0.0.0/0(或你的特定 IP),协议为 TCP,目的端口范围为 22。如果没有,点击“添加入站规则”补全。同时检查实例是否关联了网络安全组(NSG),NSG 规则优先级高于安全列表,需一并检查。

步骤二:使用实例控制台连接(若步骤一无效)

在实例详情页下方找到“实例控制台连接”,创建一个新的连接。创建完成后,点击连接旁边的菜单,选择“复制串行控制台连接命令”。

甲骨文云防火墙规则配置错误导致无法 SSH 怎么办?

前置准备:在本地终端运行该命令前,需确保已安装 OCI CLI 并完成配置。若未配置,请运行:

oci setup config

按提示输入用户 OCID、指纹、密钥路径等信息,生成 ~/.oci/config 配置文件。

密码重置:串口登录可能需要 root 密码,若未设置过,需在控制台重置实例密码。路径为:实例详情页 > 更多操作 > 重置密码。

配置完成后,在本地终端运行复制的命令,通过串口登录系统。

步骤三:检查系统内部防火墙

登录系统后,根据发行版检查防火墙状态。CentOS/Oracle Linux 常用 firewalld 或 iptables,Ubuntu 常用 ufw。例如检查 firewalld 状态:

systemctl status firewalld

若防火墙运行中,确认是否放行 ssh 服务:

firewall-cmd `--list-services`

若未放行,添加规则:

甲骨文云防火墙规则配置错误导致无法 SSH 怎么办?
firewall-cmd `--permanent` `--add-service`=ssh
firewall-cmd `--reload`

对于 ufw:

ufw status
ufw allow ssh

步骤四:检查 SSH 服务

确认 SSH 守护进程正在运行:

systemctl status sshd

若未运行,尝试启动:

systemctl start sshd

怎么验证是否生效

在本地终端尝试 SSH 连接:

ssh -i <密钥文件> opc@<公网 IP>

若能成功登录,说明网络路径已通。在系统内部也可使用 ss 命令确认 22 端口监听:

ss -tlnp | grep :22

若看到 LISTEN 状态且对应进程为 sshd,则服务正常。同时观察 OCI 控制台监控指标,网络入站流量应有变化。

常见坑

  • CIDR 填写错误:源 CIDR 必须正确,测试时可用 0.0.0.0/0 但生产环境建议限制特定 IP。
  • 协议选错:SSH 基于 TCP 协议,若安全规则选成 UDP 或 ICMP 将无效。
  • 状态型规则:甲骨文云安全列表默认是状态型的,但若手动配置为无状态,需同时配置出站规则允许响应流量。
  • SSH 端口修改:若在系统内修改了 SSH 默认 22 端口,云端安全规则也需同步修改,否则会被拦截。
  • 密钥权限:本地密钥文件权限需为 600,否则 SSH 客户端会拒绝使用。

参考来源

  • Oracle Cloud Infrastructure Documentation, "Security Lists", https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm
  • Oracle Cloud Infrastructure Documentation, "Instance Console Connection", https://docs.oracle.com/en-us/iaas/Content/Console/Concepts/consoleconnection.htm
  • Oracle Cloud Infrastructure Documentation, "Connecting to a Linux Instance", https://docs.oracle.com/en-us/iaas/Content/GSG/Tasks/testingconnection.htm