服务器被暴力破解,如何修改 SSH 配置文件?
如果你的服务器日志里频繁出现类似 Failed password for root from 203.0.113.5 port 45538 ssh2 这样的记录,说明正在被暴力破解。
直接修改 SSH 配置文件是最有效的第一步防御手段。
下面按零基础也能操作的顺序来走一遍。
操作前要确认的两件事
- 你有服务器的 root 权限(或 sudo 权限),并且已经通过 SSH 登录到服务器。
- 保留一个已登录的终端不关闭,防止后续配置错误导致掉线后连不上。建议先开启一个新 SSH 窗口测试操作,原窗口留着作为“保命通道”。
修改 SSH 配置:更换端口与禁用密码登录
- 用文本编辑器打开 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
如果你不熟悉 vi,可以用 sudo nano /etc/ssh/sshd_config。
- 找到
#Port 22这一行,去掉#并将22改成其他端口,比如22222:
Port 22222
注意端口范围最好在 1024–65535 之间,避开常用端口。
- 找到
PermitRootLogin yes,改为PermitRootLogin prohibit-password(禁止 root 使用密码登录,但仍允许密钥登录)。更安全的做法是直接改为no,但前提是你已经配置好普通用户并通过su或sudo切换。新手建议先用prohibit-password。 - 找到
PasswordAuthentication yes,改为PasswordAuthentication no,彻底关闭密码登录。这一步会让暴力破解工具直接失效。 - 保存文件并退出(vi 按
Esc,输入:wq回车;nano 按Ctrl+X,按Y,回车)。 - 重启 SSH 服务让配置生效:
sudo systemctl restart sshd
如果使用的是 Ubuntu 旧版本,服务名可能是 ssh:
sudo systemctl restart ssh
关键避坑:防火墙和 SELinux 设置
- 防火墙放行新端口:如果你用的是
ufw,执行:
sudo ufw allow 22222/tcp
sudo ufw delete allow 22/tcp # 可选,等确认新端口正常后再删除旧规则
如果用的是 firewalld(CentOS 7+):
sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload
- 云服务器厂商的安全组:需要登录云控制台,在“安全组”或“防火墙”中添加入站规则,允许新端口的 TCP 访问。记得先放行再测试,避免被安全组拦截。
- SELinux 加持的系统(如 CentOS 默认启用):如果 SSH 服务无法启动或新端口连不上,可以临时关闭 SELinux 排查:
sudo setenforce 0;确认问题后永久放行:
sudo semanage port -a -t ssh_port_t -p tcp 22222
验证效果与常见问题
如何确认修改生效?
新开一个终端,使用新端口尝试连接:
ssh -p 22222 youruser@your_server_ip
如果连接成功,原窗口可以保留会话或退出。
如果连接失败,立刻用原终端检查配置并恢复:
- 检查
/etc/ssh/sshd_config是否有语法错误:sudo sshd -t(无输出表示正常)。 - 查看 SSH 服务状态:
sudo systemctl status sshd。 - 确认防火墙已放行新端口。
常见问题解答
Q:改成 PasswordAuthentication no 后,连接时提示“Permission denied (publickey)”,但我还没配置密钥怎么办?
A:先改回 yes,配置好 SSH 密钥对后再修改。生成密钥的方法:本地运行 ssh-keygen -t ed25519,将公钥复制到服务器的 ~/.ssh/authorized_keys 中。
Q:端口修改后,其他服务(如 rsync、git)会受影响吗?
A:只要在连接这些服务时指定新端口即可,或者你可以保留 22 端口给内部信任 IP(需设置 AllowUsers 配合 Match Address)。
进阶加固建议
- 安装 fail2ban 自动封禁频繁失败的 IP:
sudo apt install fail2ban # Ubuntu/Debian
sudo yum install epel-release && sudo yum install fail2ban # CentOS
默认配置即可保护 SSH,监控 Port 22222 对应的日志。
- 只允许特定用户登录 SSH,在
sshd_config中加入:
AllowUsers yourusername
- 定期查看
/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS)核实暴力破解是否已停止。
执行完上述步骤后,绝大多数暴力破解都会被挡在门外。
如果你正在处理服务器被暴力破解的问题,建议先按本文修改 SSH 配置文件并重启服务,再结合 fail2ban 做双重保护。
过程中遇到任何报错,优先回看避坑部分和常见问题解答,基本都能解决。