阿里云服务器SSH连接不上解决

阿里云服务器SSH连接不上解决

  • admin admin
  • 2026-09-12
  • 3097
  • 0

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

优惠价格:¥ 8
当前位置:首页 > 阿里云主机 > 阿里云服务器SSH连接不上解决
详情介绍

阿里云服务器SSH连接不上通常是因为安全组未放行22端口、系统防火墙拦截、SSH服务异常或本地网络限制,需按以下步骤逐一排查修复。

检查安全组是否放行22端口

登录阿里云控制台,进入云服务器ECS实例列表,找到目标实例,在右侧操作列点击“更多”,选择“网络和安全组”中的“安全组配置”,或直接点击实例ID进入实例详情页后选择“安全组”标签。

阿里云服务器SSH连接不上解决  第1张

进入安全组规则页面,查看入方向规则,入方向必须存在一条协议类型为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。

AllowUsersDenyUsers会限制可登录用户,如果当前用户不在允许列表中,连接会被拒绝,可删除或修改该行后重启服务。

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连接。

0