甲骨文云 Ubuntu 22.04 出现 SSH 连接拒绝(Connection refused),通常是因为控制台安全列表未放行 22 端口,或者系统内部 SSH 服务未安装、未启动,建议优先检查云平台防火墙规则,再排查系统服务状态。
先说结论:这不是密码错误,而是网络请求在到达认证环节前就被拦截或拒绝了,需按“云平台防火墙→系统服务→系统防火墙”顺序排查。
- 先确认:甲骨文云控制台“安全列表”是否添加入站规则允许 TCP 22 端口。
- 先处理:通过 VNC 或控制台登录实例,确认 openssh-server 已安装且服务正在运行。
- 再验证:本地终端使用 ssh -v 命令查看握手细节,确认连接建立成功。
命令速用版
如果你能通过甲骨文云控制台的 VNC 或串行控制台登录系统,可以直接执行以下命令快速检查服务状态:
sudo systemctl status ssh
sudo ss -tlnp | grep :22
sudo ufw status如果服务未运行,尝试启动并设置开机自启:
sudo systemctl enable `--now` ssh为什么会这样
SSH 连接报错"Connection refused"与"Connection timed out"或"Permission denied"有本质区别。前者表示 TCP 三次握手在 SYN 阶段就被目标主机拒绝,说明目标主机的 22 端口没有进程监听,或者被内核防火墙直接重置连接。在甲骨文云环境下,这通常涉及两层防火墙:云平台层面的安全列表(Security List)和操作系统层面的防火墙(如 ufw 或 iptables)。此外,Ubuntu 22.04 部分最小化镜像默认可能未预装 openssh-server 包,或者默认配置禁止了 root 密码登录,导致看似连不上。
分步处理
1. 检查甲骨文云控制台安全列表
登录甲骨文云控制台,进入实例详情页,点击子网链接,查看“安全列表”。确认是否存在一条入站规则(Ingress Rules),源 CIDR 建议仅填写你的本地公网 IP,测试完成后可改为特定 IP,目标端口范围为 22,协议为 TCP。如果没有,需添加该规则。这是最常见的原因,云平台防火墙优先级高于系统内部设置。避免直接开放 0.0.0.0/0 以减少暴露风险。
2. 确认 SSH 服务状态
通过控制台 VNC 登录系统后,检查服务是否活跃。Ubuntu 22.04 默认使用 ssh 作为服务单元名称:
sudo systemctl is-active ssh如果输出 inactive 或 failed,执行启动命令。若提示找不到服务,说明未安装服务端:
sudo apt update
sudo apt install -y openssh-server3. 检查系统内部防火墙
Ubuntu 默认可能启用 ufw。检查状态:
sudo ufw status如果状态为 active 且未看到 22 端口允许记录,需放行:
sudo ufw allow 22/tcp4. 审查 SSH 配置文件
编辑/etc/ssh/sshd_config,确保以下参数配置正确。注意修改后需先检查配置语法 sudo sshd -t,无误后重启服务:sudo systemctl restart ssh
Port 22
PermitRootLogin prohibit-password
PasswordAuthentication yes如果你需要使用密码登录,确保 PasswordAuthentication 为 yes;若仅使用密钥,确保 PubkeyAuthentication 为 yes 且公钥已写入~/.ssh/authorized_keys。
怎么验证是否生效
在本地电脑终端执行 verbose 模式的连接命令,观察输出日志:
ssh -v user@你的服务器 IP正常流程应看到"Connected to..."、"Authenticating..."直至"Welcome to Ubuntu"。如果仍报错,查看服务器端日志定位具体阶段:
sudo tail -f /var/log/auth.log观察尝试连接时的实时日志,若出现"Connection closed by..."或"no matching key exchange method",则可能是客户端算法过旧,需升级本地 SSH 客户端或调整服务器配置。
常见坑
1. 默认禁止 root 密码登录
Ubuntu 22.04 默认配置 PermitRootLogin 为 prohibit-password,即 root 用户只能用密钥登录,不能用密码。如果试图用 root 密码连接会被拒绝,建议创建普通用户并赋予 sudo 权限。
2. 密钥交换算法不匹配
较新的 Ubuntu 系统禁用了部分老旧的密钥交换算法。如果本地客户端版本过老,可能提示 no matching key exchange method found。此时不应盲目开启弱算法,而应升级本地客户端软件。
3. 修改主机名后指纹冲突
如果在服务器上修改了主机名,本地客户端 known_hosts 文件中缓存的旧指纹会与新环境冲突,导致连接报错。需清除本地缓存的旧指纹记录后重新连接。
4. 服务单元名称差异
部分 Linux 发行版使用 sshd 作为服务名,但 Ubuntu 22.04 通常使用 ssh。执行 systemctl 命令时需注意区分,避免操作错误的服务单元。