很多人改SSH端口时只编辑了sshd_config,保存后直接重启服务。服务可能没有监听新端口,防火墙也可能仍只放行旧端口,远程窗口一断就只能等机房或云厂商的控制台。改端口本身不难,难的是确保改的生效不把自己拦在机器外。
在不中断当前会话的前提下,先检查配置、让新旧端口并存,再从第二个终端测试新端口,最后确认防火墙和启动状态,出现问题时按最短路径回退。
先不要关闭当前SSH窗口

当前会话是最重要的恢复入口。打开第二个终端前,先记录服务器地址、当前端口、登录账号和云平台控制台入口。任何修改都在当前会话里做,测试成功后再退出旧连接。
先保留当前连接:
- 保留当前SSH会话
- 记录当前端口和账号
- 确认云控制台或串口入口 第一次上手的服务器,这几项也要一起过一遍:新服务器先做的 8 项检查。
- 准备复制配置文件
没有第二个终端和控制台入口时,不要先改远程端口;免得中断进不去。
检查配置文件是否真的能通过

修改/etc/ssh/sshd_config后,先运行sshd -t检查语法,再用sshd -T | grep -i port确认实际生效端口。配置文件里可能有重复Port、Include文件或发行版默认片段。
先做配置检查:
- 备份sshd_config
- 运行sshd -t
- 查看sshd -T结果
- 检查Include目录
语法检查失败时不要重启服务;按报错行恢复上一份配置,再重新检查。
让新旧端口短暂并存

在确认新端口不是系统其他服务使用后,可以先保留旧端口,同时增加新端口。重启或reload后用ss -lntp查看sshd是否同时监听两个端口。这样第二个终端测试失败时,当前旧连接仍能继续工作。
先让新旧端口并存:
- 查看端口是否被占用
- 先增加新Port
- reload后看监听状态
- 第二终端指定新端口测试
新端口能登录、旧端口也仍可用时,再进入防火墙调整;不要一开始就关闭旧端口。
防火墙放行要和监听端口对应

服务器监听新端口不等于公网可达。按系统使用ufw、firewalld或云安全组时,要分别放行新端口,并从外部网络测试。云安全组没放行、家庭路由器端口转发没改,都会表现成SSH超时。端口转发这层怎么配,单独有一篇。
再放行防火墙:
- 查本机防火墙规则
- 查云安全组或端口转发
- 用外部网络测试
- 区分拒绝和超时
本机监听正常、外部超时,重点查防火墙和上游端口;外部立即拒绝,再看sshd或账号配置。
确认新端口后再撤旧端口

第二终端完成登录、sudo、上传一个小文件和退出重连后,再删除旧Port并收紧旧规则。最后重启一次,确认系统启动后仍监听新端口。保留一份旧配置和云控制台入口,下一次升级还能回退。
最后撤掉旧端口:
- 新端口登录和sudo
- 重连后执行简单命令
- 删除旧Port和旧规则
- 重启后再次测试
如果重启后新端口消失,回到控制台恢复旧配置,不要连续重启碰运气。
备注
#修改ssh端口常用文件路径及命令:
#CentOS/RHEL/AlmaLinux/Rocky Linux 以及 Ubuntu/Debian:
vim /etc/ssh/sshd_config
#修改Port行对应端口
#配置检查命令
sshd -t
#高版本Ubuntu系统需要同时修改
systemctl edit ssh.socket
#下面保持同一段,四行都要在:
[Socket]
ListenStream=
#ipv4 监听
ListenStream=0.0.0.0:22
#ipv6 监听
ListenStream=[::]:22
#重载 systemd 配置
systemctl daemon-reload
#重启 SSH 服务,按系统选一条
systemctl restart ssh # Debian / Ubuntu
systemctl restart sshd # CentOS / RHEL
systemctl restart ssh.socket # Ubuntu 高版本 socket 激活




