阿里云服务器SSH连接不上通常是因为安全组未放行22端口、系统防火墙拦截、SSH服务异常或本地网络限制,需按以下步骤逐一排查修复。
检查安全组是否放行22端口
登录阿里云控制台,进入云服务器ECS实例列表,找到目标实例,在右侧操作列点击“更多”,选择“网络和安全组”中的“安全组配置”,或直接点击实例ID进入实例详情页后选择“安全组”标签。

进入安全组规则页面,查看入方向规则,入方向必须存在一条协议类型为TCP、端口范围为22/22、授权对象为0.0.0.0/0或指定客户端公网IP的允许规则,如果授权对象写成了内网地址、安全组ID或错误网段,SSH会被拒绝。
如果没有22端口规则,点击“快速添加”或“手动添加”,选择协议类型TCP,端口范围填写22/22,授权对象填写0.0.0.0/0表示允许所有IPv4地址访问,也可填写当前本机网络的公网出口IP以降低风险,优先级保持默认,描述可写“SSH远程连接”,保存后规则立即生效,通常不需要重启实例。
同时检查安全组出方向是否允许所有流量,默认出方向全部放行,如果曾被修改为拒绝,会导致TCP握手无法完成。
确认实例状态和公网IP
在实例列表确认实例状态为“运行中”,如果状态显示“已停止”,需要先启动实例,包年包月实例如果已到期或按量付费实例余额不足,可能被自动停止,充值或续费后启动即可。
确认连接使用的IP是实例的公网IP,不是内网IP,如果实例未绑定弹性公网IP,重启或停机后公网IP可能发生变化,进入实例详情查看当前公网IP,并用新的IP连接,使用弹性公网IP的实例要确认EIP已绑定到该实例,且绑定状态正常。
如果使用域名连接,确认域名解析指向正确的公网IP,本地命令行可使用ping 域名查看解析结果,如果解析到旧IP或内网IP,需要到DNS服务商修改记录。
通过VNC登录检查系统防火墙
安全组放行后仍无法连接,需要在阿里云控制台使用VNC远程连接登录服务器,在实例操作列点击“远程连接”,选择“VNC”方式,输入系统用户名和密码或使用密钥登录。
进入系统后先检查防火墙状态,CentOS 7及以上执行:
systemctlstatusfirewalld
如果显示active (running),可临时关闭:
systemctlstopfirewalld
关闭后立即尝试本地SSH连接,如果临时关闭有效,需要永久放行22端口而不是长期关闭防火墙,执行:
firewall-cmd--permanent--add-port=22/tcp firewall-cmd--reload
Ubuntu系统检查UFW:
sudoufwstatus
如果状态为active且未放行22端口,执行:
sudoufwallow22/tcp
Debian或部分旧系统检查iptables:
iptables-L-n
如果存在拒绝22端口的规则,执行:
iptables-IINPUT-ptcp--dport22-jACCEPT
保存规则:
serviceiptablessave
检查SSH服务运行状态和监听端口
VNC登录后执行:
systemctlstatussshd
CentOS和部分发行版服务名为sshd,Ubuntu通常为ssh,如果服务未运行,执行:
systemctlstartsshd systemctlenablesshd
重启SSH服务:
systemctlrestartsshd
查看SSH监听地址和端口:
netstat-tunlp|grepsshd
或:
ss-tunlp|grep22
正常输出应包含0.0.0:22或::22,如果输出为0.0.1:22,说明SSH只监听本地回环地址,需要修改配置文件。
编辑/etc/ssh/sshd_config:
vi/etc/ssh/sshd_config
确认以下配置:
Port22 ListenAddress0.0.0.0
如果端口被修改为其他值,本地连接时必须使用ssh -p 端口号 用户@IP,若不需要修改端口可保持不变,修改后执行:
systemctlrestartsshd
检查SSH登录限制和认证方式
部分SSH连接失败是配置文件中限制了登录用户或认证方式,编辑/etc/ssh/sshd_config,检查以下参数。
PermitRootLogin no会禁止root直接登录,如果使用root连接,可将该值改为yes,或改用普通用户登录后切换,修改后重启sshd。
AllowUsers或DenyUsers会限制可登录用户,如果当前用户不在允许列表中,连接会被拒绝,可删除或修改该行后重启服务。
PasswordAuthentication no会禁止密码登录,如果使用密码方式,需要改为yes;如果使用密钥方式,则确认密钥配置正确。
PubkeyAuthentication yes应保持开启,修改配置后必须执行:
systemctlrestartsshd
同时检查/etc/hosts.allow和/etc/hosts.deny,如果/etc/hosts.deny中存在sshd: ALL,则会拒绝所有SSH连接,可清空文件或添加允许规则:
echo"sshd:ALL">>/etc/hosts.allow
检查本地网络和22端口连通性
SSH连接不上也可能是本地网络问题,在本地电脑命令行执行:
telnet服务器公网IP22
如果提示连接失败或超时,说明TCP 22端口未通,若telnet成功,说明网络链路正常,问题在认证或服务配置。
部分运营商或公司网络会封锁22端口,可尝试使用其他网络,如手机热点,测试能否连接,如果确认是本地网络限制,可以考虑修改服务器SSH端口为其他端口如2222或10022,修改时需要同步调整安全组规则和防火墙放行新端口。
本地执行ssh -vvv 用户@IP可以查看详细连接过程,卡在Connection refused多为服务未监听或防火墙拒绝;卡在Connection timed out多为安全组或网络阻断;出现Permission denied则为认证失败。
检查磁盘空间和系统资源
磁盘占满会导致SSH无法正常建立会话,VNC登录后执行:
df-h
查看根分区使用率,如果达到100%,需要清理无用文件,查看大文件:
du-sh/*
清理日志文件:
journalctl--vacuum-size=100M rm-f/var/log/*.log
内存耗尽也会影响SSH,执行:
free-m
如果内存使用接近满载,可重启相关服务或释放缓存:
sync echo3>/proc/sys/vm/drop_caches
检查SELinux和安全软件
SELinux在部分系统会阻止SSH非默认端口或密钥目录访问,执行:
getenforce
如果为Enforcing,可临时关闭:
setenforce0
永久关闭需编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启生效。
如果安装了云盾、安骑士或其他安全软件,可能在检测到异常登录后临时封禁SSH,进入对应安全软件控制台查看拦截记录,将本地IP加入白名单或关闭相关防护策略后测试。
检查密钥文件权限和客户端参数
使用密钥登录时,本地私钥文件权限必须为600或400,Windows系统忽略该权限问题,Linux/macOS需执行:
chmod600key.pem
连接命令:
ssh-ikey.pemroot@服务器公网IP
服务器端确认~/.ssh/authorized_keys文件包含对应的公钥,权限为600:
chmod600~/.ssh/authorized_keys chmod700~/.ssh
如果使用密码登录,确认输入的用户名和密码正确,多次输入错误会触发服务端临时封禁,等待几分钟后再试。
重启实例并观察控制台日志
排查仍无法解决时,可在阿里云控制台对实例执行强制重启,点击实例操作列“更多”,选择“实例状态”中的“重启”,勾选“强制重启”后确认,重启过程中可通过VNC观察系统启动日志,查看是否有文件系统错误、服务启动失败等提示。
重启完成后先确认实例回到“运行中”状态,再尝试SSH连接。