改 Linux 服务器 SSH 端口,核心动作只有四步:编辑 /etc/ssh/sshd_config 中的 Port 行、放行新端口的防火墙与安全组、用 sshd -t 校验配置后重启服务、立刻用新端口开一个会话验证成功再考虑收尾。 顺序错了,轻则连不上,重则只能抱着显示器去机房。
为什么越来越多人盯上了22端口
一台直接暴露在公网的 Linux 服务器,22 端口每天被自动化脚本扫上几百上千次是常态,登录日志里密密麻麻的 Failed password,就是暴力破解机器人留下的脚印,改端口的本质不是“加密”,而是把门牌号从默认值换成一个别人猜起来更费劲的值,从而把绝大部分无差别扫描挡在门外。
业内专家指出,端口变更属于“降低攻击面”的基础手段,但它替代不了密钥登录、禁用 root 远程登录、配置 fail2ban 这些真正的防护措施,换句话说,改端口是给大门换个位置,钥匙该配还得配。
改端口能一劳永逸吗
不能,扫描器会做全端口探测,只是耗时更长、噪音更大,所以别把改端口当成安全方案的全部,它只是安全基线里顺手能做的一件小事。
SSH端口改成多少合适
这是实操前最该想清楚的问题,选错了,后面全是麻烦。
选端口的三个原则
- 落在 1024 到 65535 之间:低于 1024 是特权端口,普通用户无法直接绑定,没必要给自己增加权限麻烦。
- 避开常见服务端口:80、443、3306、6379、8080、8443 这些都有主了,混用会让排查问题时的判断变得混乱。
- 好记但不烂大街:2222、22026 这类“伪常用”端口其实早被扫描字典收录了,效果打折。
| 候选端口 | 优点 | 风险 |
|---|---|---|
| 2222 | 好记,配置简单 | 扫描字典高频项 |
| 22026 | 比 2222 稍冷门 | 仍有被收录的可能 |
| 高位随机端口如 49221 | 被盲扫概率低 | 需要自己记牢或写进客户端配置 |
行业共识认为,端口号本身不承载安全强度,真正起作用的是“非默认”这个属性加上后续的访问控制,所以不必纠结哪个数字更“吉利”,选一个自己记得住、团队里说一声就能对上的端口就行。
动手改:从备份到验证的完整路径
下面以把 22 改成 2222 为例,CentOS 和 Ubuntu 的主干流程一致,差异点单独标注。
第一步:先看清现在跑的是什么
登录服务器后先确认监听状态:
ss -tlnp | grep ssh
输出里能看到 sshd 或 ssh 正监听在 0.0.0:22,顺手把配置文件备份一份,这是保命操作:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
第二步:编辑 sshd_config
vim /etc/ssh/sshd_config
找到 #Port 22 这一行,去掉注释并改成新端口,这里有个稳妥做法:同时保留两个 Port 行。
Port 22 Port 2222
sshd 支持监听多个端口,过渡期两条都开着,新端口验证通过后再删掉 22,能有效避免“改完自己进不去”的尴尬。
第三步:防火墙和 SELinux 放行
CentOS 系先处理 firewalld:
firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --reload
SELinux 处于 enforcing 状态,还要给新端口打上 ssh 的类型标签,否则服务起得来但连不上:
semanage port -a -t ssh_port_t -p tcp 2222
Ubuntu 系一般用 ufw:
ufw allow 2222/tcp ufw status
第四步:校验语法再重启
别再直接 restart 了,先做配置检查:
sshd -t
没有输出就代表语法通过,然后重启服务,注意服务名差异:
# CentOS / RHEL systemctl restart sshd # Ubuntu / Debian systemctl restart ssh
第五步:开新会话验证
不要关掉当前这个 SSH 窗口。 另开一个终端:
ssh -p 2222 用户名@服务器IP
能进去,再回头把 Port 22 那行删掉,重启一次服务,收工,进不去,就在原窗口里改回来重启,损失为零。
Ubuntu修改SSH默认端口号跟CentOS差在哪
不少人在两套系统之间来回切换时踩坑,差异主要集中在这几处:
| 项目 | CentOS / RHEL | Ubuntu / Debian |
|---|---|---|
| 服务名 | sshd | ssh |
| 配置文件 | /etc/ssh/sshd_config | 同路径,一致 |
| 防火墙工具 | firewalld | ufw |
| 强制访问控制 | SELinux(需 semanage) | AppArmor,通常无需额外端口标签 |
| 日志查看 | journalctl -u sshd | journalctl -u ssh |
配置文件路径是统一的,这也是 SSH 协议本身的设计,真正的区别在系统层的访问控制,CentOS 上忘了 SELinux 那一步,是新手里最常见的“配置全对但就是连不上”。
云服务器SSH端口修改必须先动安全组
如果你用的是简米云、酷番云、华为云这类云主机,服务器内部的防火墙只是第一道门,云平台的安全组是更外面那道门,正确顺序是:先在控制台的安全组入方向规则里添加 2222 端口的放行,再去改 sshd_config,反过来做,重启服务的那一刻,你就和服务器失联了,只能通过控制台的 VNC 或远程连接功能进去救火。
Linux修改SSH端口后连接不上怎么办
按下面的顺序排查,基本能定位到问题:
- 服务是否真的起来了:
ss -tlnp | grep 2222,没有监听就是配置或重启失败。 - 配置是否有重复或冲突的 Port 行:
grep -n "^Port" /etc/ssh/sshd_config,多行都生效,但写错一行就会整体异常。 - 本机防火墙是否放行:
firewall-cmd --list-ports或ufw status。 - 云安全组是否放行:控制台里核对入方向规则,注意协议要选 TCP。
- SELinux 是否拦截:
getenforce,临时设为 permissive 测试,确认后再补 semanage 规则。 - 客户端缓存干扰:本地
~/.ssh/known_hosts里同一 IP 的旧记录可能触发告警,用ssh-keygen -R 服务器IP清掉再连。
如果全部排查完还是不行,通过云控制台的 VNC 登录,把配置回滚到备份文件,先恢复访问再慢慢查。
改完之后的收尾动作
端口通了不代表事情结束,看一眼日志确认没有异常:
journalctl -u sshd -n 50
常连的机器可以在本地 ~/.ssh/config 里写个别名,省得每次敲端口号:
Host myserver
HostName 192.0.2.10
Port 2222
User deploy
之后 ssh myserver 一条命令直达,团队协作时把这个配置片段发出去,比口头交代端口号靠谱得多。
Linux SSH端口修改常见问题
改SSH端口要不要关闭防火墙
不能关,关闭防火墙等于把整台机器的所有端口都暴露出去,风险远大于改端口带来的收益,正确做法是只放行新端口,其余规则保持原样,必要时再收紧到指定来源 IP。
改完端口后原来的22端口还能用吗
取决于配置文件里是否还留着 Port 22,两行并存时两个端口都能登录,删掉 22 那行并重启后,旧端口立即失效,过渡期保留双端口,就是为了给自己留一条退路。
改SSH端口需要重启整台服务器吗
不需要,SSH 服务的配置变更只要求重启 sshd 或 ssh 服务本身,已建立的会话不会中断,整机重启既慢又可能影响业务进程,在改端口这件事上属于多余动作。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/796081.html


