在阿里云上第一次使用ECS,很多人都遇到过这种情况:控制台显示实例正常运行,本地却连不上。终端一直转圈、提示超时,或者直接报拒绝连接。表面看是同一个问题,原因往往不同。好在大多数情况都能按固定顺序找到,从外到内逐层检查,通常半小时以内就能定位。

一个典型的例子
某个做本地生活服务的小团队,周五晚上给一台新买的ECS部署测试环境。部署完成后,运维同事在本地终端执行ssh命令,等了四十秒仍然没有反应。控制台里实例状态是“运行中”,CPU和网络监控也有数据,大家一度怀疑是账号或地域的问题,来回折腾了不少时间。
最后的原因很简单:安全组只放行了80和443端口,22端口没有开。这位同事之前在另一台实例上改过SSH端口,印象还停在那次操作上,而这台新实例沿用了默认安全组模板,入方向规则里根本没有远程管理需要的端口。补上规则后,连接立刻恢复。这类问题从网络层查起最省事,不必一上来就钻进系统内部。
先看报错信息,判断方向
连接失败时,终端给出的提示已经包含不少线索,先读懂它再动手:
- Connection timed out(连接超时):数据包大多被中途丢弃,多半是安全组或系统防火墙拦截,先查网络层。
- Connection refused(拒绝连接):请求已经到达服务器,但对应端口上没有进程在监听,常见于sshd未运行,或者端口写错了。
- Permission denied(权限被拒):网络已经通了,问题出在账号、密码或密钥上,直接去查登录凭证。
如果只想确认网络是否通畅,可以在本地执行 telnet 公网IP 端口号。能进入连接界面,说明网络层已经打通,剩下的问题就在服务或凭证上。
第一层:确认实例与公网地址
第一步是确认连接的目标地址没有填错。常见问题有几类:
- 创建实例时没有勾选公网地址,实例只有内网IP,外部无法直接访问。
- 用了弹性公网IP,但没有绑定到当前实例,或者解绑后地址变了,本地还在用旧地址。
- 实例已停止,或者因欠费被停机。列表里容易看错,把回收站或已停机的实例当成了运行中的实例。
- 本地填的是内网地址,只有同一VPC内的机器能访问,换到办公室或家里就连不上。
在控制台实例详情页可以同时看到公网和内网地址,核对无误再往下走。如果实例确实处于停止状态,先启动,等状态变成运行中再尝试。
第二层:核对安全组规则
安全组是最常见的拦截来源。Linux实例一般需要放行22端口,Windows实例需要放行3389端口。配置时有几点要留意:
- 入方向的授权对象尽量填自己的出口IP。0.0.0.0/0虽然省事,但等于对全网开放,只在确实有需要时使用,并配合密钥登录和防暴力破解措施。
- 改过SSH端口,安全组里也要放行新端口。只保留22,等于白改。
- 一台实例可能绑定了多个安全组,规则会叠加生效,需要逐个检查,不能只看其中一个。
- 公司或学校网络经过NAT出口时,外部看到的IP可能和自己以为的不一样。可以通过查询IP的网站确认实际出口地址,再填进规则。
安全组规则修改后通常立即生效,不需要重启实例。保存后用前面提到的telnet测一下,端口通了再进行下一步。
第三层:进入系统检查服务
如果网络层没有问题,但依然登录不上,就要进入实例内部查。即使SSH不可用,也可以通过控制台的VNC远程连接进入系统。这一层常见的问题有:
- sshd服务没有运行。执行 systemctl status sshd 查看状态,若未启动,用 systemctl start sshd 拉起,再用 systemctl enable sshd 设置开机自启。
- 系统防火墙没有放行。使用firewalld或iptables时,要确认22端口或新端口已经放行。系统防火墙不放行,安全组开了也没用。
- 磁盘写满。日志膨胀导致磁盘没有空间时,sshd可能无法正常写入会话信息。用 df -h 查看占用,清理无用文件后再试。
- sshd配置改错。修改 /etc/ssh/sshd_config 后,先用 sshd -t 校验语法,确认无误再重启服务,避免服务起不来,把自己锁在外面。
- 密钥或密码不对。使用密钥登录时,确认实例绑定的密钥对与本地私钥一致。Linux下私钥权限过于宽松,ssh会直接拒绝使用,一般设置为600。
在VNC里改sshd配置前,先把 sshd_config 备份一份。每改一项就验证一次,改动太多时出了问题很难回退。
照着做的排查顺序
为了减少反复试错,可以把排查过程固定下来:
- 确认实例为运行状态,核对公网IP无误。
- 检查安全组入方向规则,确认对应端口已放行。
- 用telnet或nc测试端口,区分是网络问题还是服务问题。
- 通过VNC进入系统,检查sshd服务、系统防火墙和磁盘空间。
- 核对登录凭证,包括密码、密钥对和私钥权限。
- 仍然无解时查看日志获取具体报错。CentOS等RHEL系列可以看 /var/log/secure,Ubuntu一般在 /var/log/auth.log,也可以用 journalctl -u sshd 查看服务日志。
大部分问题在前两三步就能定位。Windows实例的思路相同,端口换成3389,服务换成远程桌面服务,并确认远程桌面功能已经启用。
小结
阿里云远程连接不上,表面是登录问题,背后可能牵涉实例状态、网络规则和系统服务。先看报错类型,再按从外到内的顺序排查,通常比反复重启更快。团队如果经常远程管理,可以把安全组模板、密钥管理和SSH配置统一下来,减少同类问题重复出现。