SSH端口和登录方式的安全设置,核心就三步:改掉默认22端口、关闭root直接登录、改用密钥认证。这三招做完,就能挡掉绝大多数自动化爆破攻击。
端口不改,SSH安全无从谈起先看linux修改ssh端口22安全吗
很多朋友第一次接触服务器安全,都会纠结一个问题:linux修改ssh端口22安全吗?会不会改了反而出问题?
行业共识认为,修改默认端口是成本最低、见效最快的防护手段,互联网上每天都有大量扫描器在扫全网的22端口,找到一台开着22端口的服务器,就往里试探密码,改掉默认端口,相当于把自家大门从正街挪到了巷子里,扫描器路过时大概率直接忽略,需要说明的是,改端口防的是“无差别扫描”,防不了“定向攻击”,如果攻击者已经锁定你的IP,那改不改端口都拦不住他,改端口是第一道门槛,不是全部。
实际动手改端口,分三步走。
第一步:选定新端口
端口号范围是0到65535,但建议选1024以上的高位端口,避开常见服务默认占用的端口,比如8022、22026、52222这类,都在常用端口之外,顺带说一句,选端口时留意一下,别跟服务器上跑着的Web服务、数据库服务撞车,Nginx默认80/443,MySQL默认3306,Redis默认6379,这些都得避开。
第二步:修改sshd配置
用root身份登录服务器,执行以下命令:
vim /etc/ssh/sshd_config
找到这一行:
#Port 22
去掉注释,改成你选定的端口号:
Port 8022
保存退出后,先别急着重启服务。先验证一下配置有没有语法错误,执行:
sshd -t
没报错再重启:
systemctl restart sshd
注意,重启sshd服务不会断开当前已有的SSH连接,这个可以放心,但保险起见,建议你新开一个终端窗口,用新端口试着连一次,确认能连上再关掉旧连接。
第三步:防火墙和安全组放行
这一步坑最多,改完端口连不上,十有八九是防火墙没放行,Linux服务器本身有iptables或firewalld,云服务器在控制台还有一层安全组,两层都得放行。

以firewalld为例:
firewall-cmd --permanent --add-port=8022/tcp firewall-cmd --reload
如果你用的是简米云、酷番云或华为云,登录云控制台,找到实例的“安全组”配置,添加入方向规则,TCP端口8022,来源建议限定为你自己的办公IP,而不是0.0.0.0/0,这样更稳。
改完端口后,用新端口登录试试:
ssh -p 8022 root@你的服务器IP
能登进去,说明改端口这一步就算拿下了。
登录方式升级ssh密钥登录与密码登录的区别在哪里
改完端口,第二步就该收拾登录方式了,这里先搞清楚ssh密钥登录与密码登录的区别。
密码登录的问题在于,密码本身是一串可被猜测或窃取的字符,暴力破解工具每秒能尝试成百上千次密码组合,弱密码基本撑不过几分钟,即使用强密码,也怕撞库泄露,同一个密码在多台服务器上用,一旦有一个地方泄露,其他服务器全部暴露。
密钥登录用的是一对非对称加密的钥匙,私钥留在本地,公钥放到服务器上,登录时,服务器用公钥验证你的私钥,整个过程不需要传输密码,私钥也永远不会离开你的电脑。私钥本身是一个极长的随机数,暴力破解的难度,相当于从全宇宙的原子数量里猜出你手里那一颗。
密钥登录的好处是实打实的,可以批量管理服务器而不用记一堆密码,也彻底斩断了密码泄露这条攻击路径。
生成密钥对
在你本地电脑上操作,Windows可以用PowerShell,Mac和Linux直接开终端:
ssh-keygen -t ed25519 -C "你的备注信息"
一路按回车,默认会在~/.ssh/目录下生成两个文件:id_ed25519是私钥,id_ed25519.pub是公钥,私钥文件务必保管好,不要发给任何人,想更稳一点,可以在生成时设置一个passphrase(口令),每次使用私钥时多输一次口令,这样即使私钥文件丢了,别人也打不开。

把公钥部署到服务器
一条命令搞定:
ssh-copy-id -p 8022 root@你的服务器IP
如果系统里没有ssh-copy-id,就手动操作:把本地的id_ed25519.pub内容追加到服务器的~/.ssh/authorized_keys文件里,记得给.ssh目录设置700权限,authorized_keys文件设置600权限。
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
验证密钥登录并关闭密码登录
先用密钥方式登录一次,确认能进得来,然后编辑/etc/ssh/sshd_config,把密码登录关掉:
PasswordAuthentication no
再执行systemctl restart sshd,密码登录就此关闭,没带私钥谁也进不来。
这里提醒一句:关闭密码登录之前,务必确认密钥登录已经测试通过,否则把自己锁在门外就很尴尬了,业内专家给出的建议是,先保持密码登录开着,用密钥登录验证没问题,再关掉密码认证,给自己留条后路。
从端口到登录方式再回看一遍把ddos和爆破挡在门外
端口改了,密码登录关了,是否就万事大吉?还差一点。
端口和登录方式属于“门锁”,属于第二道防线和第三道防线,真正把服务器暴露在公网上的第一道防线,其实是防火墙的访问控制,如果你对服务器安全还有更高的要求,可以再叠加这三个操作:
限制登录来源IP,如果你的办公IP是固定的,在/etc/hosts.allow里只放行你的IP访问SSH端口,其他来源全部拒绝,配合/etc/hosts.deny使用,这个方案在静态IP场景下非常有效,IP不固定的话,这个方案就别用了,避免把自己挡在门外。
部署Fail2ban,这个工具会监控SSH登录日志,某个IP连续登录失败多次,自动把这个IP拉黑一段时间:
yum install fail2ban -y systemctl start fail2ban systemctl enable fail2ban
配置在

/etc/fail2ban/jail.local里,默认规则已经覆盖SSH,基本不用改就能用,结合当前服务器可能面临的CC或DDoS攻击风险,Fail2ban能显著降低暴力破解带来的系统负载。
关闭SSH对root用户的直接登录。
PermitRootLogin no
日常操作先登录普通用户,需要root权限时用su -切换,或者配置sudo权限,注意这个操作会直接影响云服务器控制台的“远程连接”功能,因为VNC登录方式也有时会走root直接登录逻辑,操作前先确认自己有普通用户可登录。
SSH端口与登录方式常见问题解答
改了SSH端口之后,用ssh -p 22连不上是什么原因?
原因大概率是改动没有真正生效,或者是防火墙没有放行新端口,可以按顺序排查:登录云控制台,用VNC或网页终端进入系统,检查sshd_config里的端口配置是否已生效,执行ss -lntp查看当前sshd监听在哪个端口,再检查firewalld或iptables是否放行新端口,最后检查云安全组规则是否允许新端口的入站流量,如果新端口还是连不上,检查是否有监听多个sshd进程,配置文件修改后重启是否真的成功,sshd -t能帮助确认配置文件没有语法错误,如果还是不行,把防火墙临时关掉做测试,排除防火墙干扰后马上恢复。
密钥登录和密码登录哪个更推荐用于生产环境?
生产环境强烈推荐只用密钥登录,关闭密码认证,密钥不会被网络嗅探或撞库窃取,安全性高一个量级,密码登录即使开启了fail2ban,也仍然存在被中间人和钓鱼攻击拿到密码的风险,特别是多台服务器管理场景,密钥登录是行业内的标准做法。
避免被暴力破解,修改端口够用吗?
不够,端口,本身没有直接对抗暴力破解的能力,账号过期、弱密码重新开放、防火墙漏洞或日志权限未设置,都会让改端口的效果打折扣,核心是关闭密码登录、使用密钥、结合fail2ban拦截,修改默认端口只是减少被扫描的概率,三者配合才能形成完整的防线。