SSH 安全加固:改端口、禁用 root、强制密钥登录
三步收紧 SSH:换非标准端口、关掉 root 直登、只允许密钥登录,把爆破挡在门外。
SSH 是你登录服务器的正门。默认配置(22 端口 + 允许 root + 允许密码)每天都会被自动化脚本扫描爆破。本文用三步把它加固,命令以 Ubuntu/Debian 为主,并标注 CentOS/Rocky 的差异。
动手前:先备一条后路
所有改动都在 /etc/ssh/sshdconfig。改完千万不要立刻关掉当前会话——另开一个新终端验证能登录成功后再退出,一旦配置写错还能用旧会话救回来。建议先备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
第一步:确保密钥能登录
这是最关键的一步。先确认密钥可用,再关密码,否则容易把自己锁在门外。
在你的本地电脑生成密钥(已有可跳过),并上传到服务器:
ssh-keygen -t ed25519 -C "你的备注"
ssh-copy-id -p 22 user@your-server-ip
然后新开一个终端用密钥实测登录一次:
ssh -p 22 user@your-server-ip
能免密码进去,才可以继续下一步。
第二步:修改 sshdconfig
用编辑器打开配置,逐项设置:
sudo nano /etc/ssh/sshd_config
Port 2222 # 换成一个 1024-65535 的非标准端口
PermitRootLogin no # 禁止 root 直接登录
PubkeyAuthentication yes # 开启密钥登录
PasswordAuthentication no # 关闭密码登录(确认密钥可用后再关)
AllowUsers deploy admin # 白名单:只允许这些用户登录
AllowUsers 按需填写你的普通账号,用空格分隔多个用户。改端口不是万能的,但能显著减少无脑爆破的噪音。
第三步:放行端口与重启
改了端口后,必须让防火墙和 SELinux 都放行,否则重启后连不上。
防火墙(Ubuntu/Debian 用 ufw):
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp # 确认新端口能登后再删旧规则
CentOS/Rocky 用 firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
SELinux(CentOS/Rocky 默认开启,Ubuntu/Debian 一般无需):
sudo semanage port -a -t ssh_port_t -p tcp 2222
若提示 semanage 未安装,先装 policycoreutils-python-utils。
重启 SSH 服务:
sudo systemctl restart ssh
注意:CentOS/Rocky 上服务名是 sshd:
sudo systemctl restart sshd
重启前建议先校验语法:sudo sshd -t,无输出即正常。
收尾验证
保持当前会话不动,新开终端用新端口和密钥登录:
ssh -p 2222 user@your-server-ip
登录成功、且用密码登录被拒绝,说明加固生效。这时再安心关掉旧会话。若云控制台有安全组/防火墙,记得同步放行新端口。
小结
SSH 加固的核心顺序是:先让密钥能登,再关密码,最后改端口配防火墙。三项配置——PermitRootLogin no、PasswordAuthentication no、AllowUsers——就能挡掉绝大多数自动化攻击。全程牢记别关当前会话、每一步都新开终端验证,就不会有把自己锁外面的风险。