服务器被暴力破解,如何禁用密码登录?
服务器被暴力破解是新手站长经常遇到的棘手问题——攻击者不断尝试 SSH 密码,直到蒙对为止。
最直接的解决方案就是彻底禁用密码登录,只允许密钥认证。
下面我会用最直白的步骤,带你完成这个操作。
准备工作
确保你满足以下条件:
- 已经通过 SSH 连接到服务器,并且有
sudo权限(大部分同学用的是 root 用户,自带最高权限)。 - 已经配置好 SSH 密钥认证:即你已经能通过密钥免密登录,而不是每次都要输密码。这一步最关键——如果密钥认证没生效就禁用密码,你会直接把自己锁在门外。
- 之前没有修改过 SSH 默认端口(如果改了,后续重启服务时注意端口号要对应)。
如果你还没有配置密钥认证,
建议先执行 ssh-keygen 生成密钥对,
然后将公钥 id_rsa.pub 内容复制到服务器的 ~/.ssh/authorized_keys 文件中(具体方法会在文末常见问题里补充)。
核心操作:修改 SSH 配置并重启服务
操作分三步:改配置、检查、重启。
第一步:编辑 SSH 配置文件
执行:
sudo vim /etc/ssh/sshd_config
(如果你用的是 nano 或其他编辑器,把 vim 替换掉即可)
找到下面这行:
#PasswordAuthentication yes
或者:
PasswordAuthentication yes
把它改为:
PasswordAuthentication no
注意行首不要有 # 号,否则该配置不生效。
修改后保存并退出(vim 下用 :wq)。
第二步:检查密钥认证是否已开启
在同一个配置文件中,找到:
PubkeyAuthentication yes
确保这一行是 yes 且未被注释。
一般情况下默认就是开启的。
第三步:重启 SSH 服务
执行:
sudo systemctl restart sshd
或者(CentOS 6 等旧系统):
sudo service sshd restart
重启后,不要立即断开当前连接。
建议先打开第二个终端窗口,用密钥登录一次确认能正常访问。
确认没有问题后,再关闭旧连接。
避坑指南与高频问题
Q1:我按步骤改了配置并重启,为什么密码还能登录?
- 检查配置文件是否有语法错误:
sudo sshd -t。如果这个命令没有输出错误信息,说明配置正确。 - 确保你修改的是
/etc/ssh/sshd_config,而不是/etc/ssh/ssh_config——后者是客户端的配置,不影响服务端。 - 部分 Linux 发行版使用
/etc/ssh/sshd_config.d/目录下的覆盖文件,检查该目录下是否有 override 文件。
Q2:我不小心把所有连接都断开了,现在无法 SSH 登录怎么办?
- 如果你在同一局域网内或者云服务商提供 VNC/控制台访问,可以通过面板自带的“网页版终端”或 VNC 登录服务器,重新改回
PasswordAuthentication yes并重启 SSH。 - 如果服务器在云端且没有控制台,建议先去云服务商的后台 “重置密码” 功能,用新密码通过控制台终端登录。
Q3:如何给服务器配密钥认证?
本地电脑生成密钥对:
ssh-keygen -t rsa -b 4096
然后上传公钥到服务器:
ssh-copy-id root@你的服务器IP
输入一次密码后,公钥就会自动追加到服务器 ~/.ssh/authorized_keys。
后续再用 SSH 登录就不需要密码了。
验证效果
完成以上操作后,你可以做两步验证:
- 尝试密码登录:在本地终端执行
ssh root@你的服务器IP,如果系统直接拒绝密码输入并提示Permission denied (publickey),说明配置生效。 - 用密钥登录:正常 SSH 进入,确认业务不受影响。
如果发现任何异常,优先回到第一步检查配置文件的 PasswordAuthentication 项是否被正确注释或覆盖。
最后说两句
禁用密码登录后,暴力破解基本就失效了,因为攻击者无法通过密码猜解。
后续建议配合修改 SSH 端口、使用 fail2ban 等措施进一步提升安全层级。
如果你刚接触服务器运维,可以从这篇教程开始,先把这个最基础也最有效的防护手段落地。