SSH远程服务器端口,就是SSH服务在服务器上监听的TCP端口,默认是22,它决定了你从哪里能“敲开”这台服务器的大门。搞懂这个概念,你才能安全地连上Linux服务器,也才能理解为什么总有人劝你别用默认端口。
SSH端口到底是什么,它在连接中扮演什么角色
很多刚接触服务器的人会把SSH和端口搞混。SSH是一种加密远程登录协议,而端口是这台服务器上的一个“门牌号”,默认情况下,SSH服务监听在TCP 22端口,你执行ssh root@你的服务器IP时,客户端默认就会去连接对方的22号门,如果服务器把SSH服务换到了2222端口,你连接时就必须写成ssh -p 2222 root@你的服务器IP,否则就会提示连接被拒绝。
这个过程可以想象成:IP地址是小区地址,端口则是具体到哪一户,没有端口,就算找到了小区,也不知道该敲谁家的门。
为什么SSH默认偏偏选22端口
22这个数字是早期互联网分配端口时定的。互联网号码分配机构将TCP 22分配给了SSH协议,此后几乎所有Linux发行版都沿用这个默认值,这个历史习惯带来的直接后果就是,全世界大量扫描机器人每天都会尝试连接所有公网IP的22号端口,行业共识认为,暴露在公网的默认22端口,每天都会收到成百上千次暴力破解尝试,这是你的服务器日志里最常见的噪音。
SSH默认端口22怎么改,实操步骤与避坑指南
把SSH端口从22改成其他数值,是目前最有效的服务器安全加固手段之一,它能直接过滤掉绝大多数“盲扫”攻击,因为扫描器通常只盯默认端口。
第一步:修改sshd_config配置文件
登录服务器后,执行:
sudo vim /etc/ssh/sshd_config
找到#Port 22这一行,去掉注释并改成你想要的端口,
Port 22222
改完后保存退出,注意端口范围是1到65535,但建议避开1-1024的常用端口和已被占用的端口,如果你跑着Web服务,别用80和443;如果有数据库,别用3306或5432。
第二步:重启SSH服务前务必做一件事
在重启SSH服务之前,先开一个新终端测试连接,很多新手改完端口后直接重启SSH服务,结果发现自己断线了,而且新端口连不上,原因往往是防火墙没放行。

如果你用firewalld:
sudo firewall-cmd --permanent --add-port=22222/tcp sudo firewall-cmd --reload
如果你用iptables:
sudo iptables -A INPUT -p tcp --dport 22222 -j ACCEPT sudo iptables-save
如果服务器是简米云、酷番云这类云主机,还需要去安全组控制台把新端口加入入方向规则,这一步经常被忽略,导致端口明明改了,外网却永远连不上。
第三步:重启SSH服务并验证连接
sudo systemctl restart sshd
然后用新端口连接:ssh -p 22222 root@你的服务器IP,确认能登录后,再回头去把旧端口的相关配置清理干净。
修改端口后常见的坑
- SELinux拦截:CentOS系统如果开了SELinux,改了端口可能被拦截,需要执行
sudo semanage port -a -t ssh_port_t -p tcp 22222放行。 - 忘记改客户端配置:如果你平时用ssh config文件管理多台服务器,记得同步修改Port这一项。
- 端口被占用:执行
sudo lsof -i:22222确认新端口没被其他程序占住,否则SSH服务根本起不来。
SSH连接不上什么原因,先按这个思路排查
连接不上服务器是新手最头疼的事,但排查思路其实相当固定,别急着重装系统,按以下顺序自查。
看端口能否通,区分网络层与服务层问题
- 在本地执行
telnet 你的服务器IP 22222,如果提示Connection refused,说明端口是通的,但SSH服务没监听或者挂了。 - 如果提示Connection timed out,说明网络层不通,问题多半出在防火墙、安全组或运营商封端口上。
- 如果提示Connection closed by remote host,说明SSH服务在但拒绝了你的连接,重点检查sshd_config里的Port设置和允许登录的用户。
常见原因速查
| 现象 | 大概率原因 | 解决方向 |
|---|---|---|
| 超时 | 安全组/防火墙没放行 | 检查云控制台安全组、firewalld规则 |
| 拒绝连接 | sshd服务挂了或端口没监听 | 重启sshd,查ss -tlnp确认监听状态 |
| 密码正确但登录失败 | 密码登录被禁用 | 检查sshd_config的PasswordAuthentication |
| 密钥登录报错 | 密钥权限不对 | 检查authorized_keys权限需为600 |
| 断链频繁 | 网络不稳定或闲置超时 | 调整ClientAliveInterval参数 |
连接被拒绝时怎么自我诊断
先检查服务状态:
sudo systemctl status sshd sudo ss -tlnp | grep ssh
第二条命令如果没有任何输出,说明sshd没监听,再去看配置文件里是不是语法写错了,可以用sudo sshd -t检查配置文件的正确性,它能帮你找出拼写错误或参数冲突。
SSH端口安全策略的进阶操作,不只是换个数字
改端口只是第一步,真正专业的服务器加固是一套组合拳。
限制可登录的IP来源
在/etc/hosts.deny和/etc/hosts.allow里做限制太古老了,现在更推荐直接写防火墙规则,比如只允许你的办公IP访问SSH端口:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的办公室IP" port protocol="tcp" port="22222" accept' sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" port protocol="tcp" port="22222" accept'
这样别人换了端口扫描到了也连不进来,因为来源IP根本不在白名单里。
禁用root直接登录
编辑sshd_config:
PermitRootLogin no
让所有登录都先走普通用户,需要管理员权限时再su -切换,这能防住一部分针对root的定向破解,因为攻击者得先猜出一个普通用户名。
公钥认证替代密码认证
生成密钥对(本地操作):
ssh-keygen -t ed25519 -C "你的备注" ssh-copy-id -p 22222 用户名@服务器IP
之后在sshd_config里设置:
PasswordAuthentication no
至此,密码登录被完全禁止,只有持有私钥的客户端才能进,注意,设置成no之前务必确认你的公钥已经能成功登录,否则你会把自己锁在门外。
用fail2ban拦截暴力破解
fail2ban能监控SSH日志,在连续多次登录失败后自动封禁来源IP一段时间,安装后默认配置就能用,但它对错误的处理规则较多,设置不当容易误封自己,建议先设置较宽松的阈值,比如最多失败5次才封禁,封禁时间设为10分钟,运行稳定后再收紧。
关于SSH远程服务器端口,你可能还会遇到这些问题
SSH端口扫描是什么,我要怎么应对有人的服务器每天被扫
SSH端口扫描是指攻击者用工具批量探测IP段上哪些主机的22端口是开放的,然后对这些开放的主机发起口令爆破或漏洞探测,公网上的服务器几乎都会被扫,这是常态,应对方式就是上文提到的改端口、限制来源IP、禁用密码登录、启用fail2ban,做了这四件事,扫描器基本拿你没辙。
云服务器的SSH端口和本地虚拟机SSH端口有什么不同
本地虚拟机的SSH端口通常只需在宿主机上做端口转发,比如把宿主机的2233端口映射到虚拟机内部的22端口,然后用ssh -p 2233 用户@宿主机IP连接,而云服务器除了操作系统层面的防火墙,还多了一道安全组过滤,所有外部流量先经过安全组规则检查,再到达服务器网卡,所以云服务器连不上,第一反应应该去查安全组,而不是只盯着系统防火墙。
为什么改了端口之后服务器日志里还是能看到有人尝试连接
这分两种情况:一种是你改的端口不够冷门,扫描器仍然会覆盖到;另一种是你放在云服务商前面的负载均衡或CDN节点记录的探测流量,想彻底安静,回到源头:只允许你信任的IP访问SSH端口,端口只是第一道门,IP白名单才是真正的锁。
最终要记住的是,SSH端口本质上是服务器安全边界的入口,它不该是一个固定不变的默认值,改端口、控制来源、切换密钥认证,这一套流程下来,你的服务器才算真正关上了大门,别怕麻烦,这些操作加起来不超过半小时,但能帮你挡下绝大多数自动化攻击。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/745364.html

