修改 SSH 端口后连不上,绝大多数情况不是服务挂了,而是流量在半路被拦下了。最优先要查的是云平台控制台的安全组规则,其次才是系统内部的防火墙配置。
先说结论:修改端口后无法连接,通常是因为云平台安全组未同步放行新端口,或系统防火墙未更新规则。
- 先确认:sshd 服务是否监听新端口且绑定 0.0.0.0
- 先处理:同时在系统防火墙和云控制台安全组放行新端口
- 再验证:使用 telnet 或 nc 测试 TCP 连通性
操作前重要警告
在修改配置前,务必确认拥有云服务器的 VNC 或远程控制台权限。一旦防火墙或 SSH 配置错误导致无法远程连接,控制台是唯一的恢复途径。建议先放行新端口,验证成功后再关闭 22 端口。
第一步:修改 SSH 配置文件
使用 root 权限编辑配置文件。以下以 CentOS/Ubuntu 通用路径为例:
sudo vim /etc/ssh/sshd_config
找到 #Port 22 行,取消注释并修改为新端口(例如 2222):
Port 2222
保存退出后,重启 SSH 服务使配置生效:
sudo systemctl restart sshd
第二步:检查服务监听状态
确认 sshd 已正常运行并监听新端口。执行以下命令:
sudo systemctl status sshd
sudo ss -tlnp | grep :2222
确认输出包含 0.0.0.0:2222 或 [::]:2222。如果显示 127.0.0.1:2222,说明只允许本地连接,需检查配置中的 ListenAddress 设置。
第三步:放行系统防火墙
根据系统类型执行相应命令,注意需要 root 权限:
CentOS/RHEL (firewalld):
sudo firewall-cmd `--add-port`=2222/tcp `--permanent`
sudo firewall-cmd `--reload`
Ubuntu/Debian (ufw):
sudo ufw allow 2222/tcp
第四步:同步云平台安全组
登录云服务商控制台,找到实例关联的安全组,在“入方向”规则中添加新端口的 TCP 规则。注意端口范围需精确填写(如 2222/2222),授权对象通常填 0.0.0.0/0 或你的本地 IP。
怎么验证是否生效
在本地客户端使用以下命令测试 TCP 连通性:
telnet 服务器 IP 2222
# 或
nc -zv 服务器 IP 2222
如果能建立连接(显示 Connected 或 succeeded),说明网络链路已通。此时若 SSH 仍失败,需排查密钥或认证配置。若连接被拒绝或超时,则继续检查上述防火墙和安全组设置。
常见坑与紧急恢复
- 安全组规则未启用:检查是否配错了网络类型(如配到了内网安全组)。
- 服务未重启:修改配置后必须重启 sshd 服务,仅 reload 可能不生效。
- SELinux 拦截:若开启 SELinux,非标端口可能被拦截。正式环境建议使用
semanage port -a -t ssh_port_t -p tcp 2222添加策略。临时测试可执行setenforce 0,测试后务必执行setenforce 1恢复。 - 锁死风险:修改端口时直接关闭了 22 端口,一旦新端口配置失误将无法远程登录。建议保留 22 端口直至新端口验证成功。
- 紧急恢复:若无法连接,通过云控制台 VNC 登录,还原
/etc/ssh/sshd_config中的端口为 22,重启服务,并检查防火墙规则。