SSH 密钥登录与安全加固:告别密码登录
云服务器刚开通默认是 root 加密码登录,密码再复杂也架不住全网扫描器 24 小时不间断爆破。正确姿势是密钥登录加禁用密码加改端口加 fail2ban 四件套,半小时配完,此后 SSH 爆破基本与你无关。
一、生成密钥对
本机执行一次即可,推荐 ed25519 算法,又短又快:
ssh-keygen -t ed25519 -C "my-laptop"
一路回车用默认路径 ~/.ssh/id_ed25519,passphrase 建议设一个——私钥万一泄露还有最后一道口令。生成后得到两个文件:id_ed25519 是私钥,绝对不要发给任何人;id_ed25519.pub 是公钥,可以随便贴。
二、把公钥传上服务器
最省事的是 ssh-copy-id,它会自动追加到服务器的 ~/.ssh/authorized_keys:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203.0.113.10
没有 ssh-copy-id 的环境就手动追加:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
权限错了 SSH 会直接拒绝密钥,一定检查:目录 700、authorized_keys 600、家目录不能组可写。
三、先验证密钥能登,再动服务端配置
新开一个终端,用密钥登录一次:
ssh -i ~/.ssh/id_ed25519 root@203.0.113.10
能进来再改配置,千万别先禁密码再测试——一旦密钥有问题,自己就被锁在门外。确认无误后编辑 /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
prohibit-password 的意思是 root 只能用密钥登录,密码登录一律拒绝。改完重启 sshd:systemctl restart sshd。重启后当前会话不会断,但新连接必须走密钥。
四、改端口:把 22 藏起来
22 端口是扫描器的头号目标,改成高位端口能挡掉九成以上的无脑扫描:
Port 2222
同步放行防火墙(UFW 示例):ufw allow 2222/tcp,再删掉旧规则 ufw delete allow 22/tcp。注意顺序:先放行新端口、验证能连,再关旧端口。云平台安全组同样要放行新端口,顺序不能反。
五、fail2ban 兜底
改了端口也不是万无一失,fail2ban 负责把仍在尝试爆破的 IP 拉黑:
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
默认规则 5 次失败登录就封 10 分钟,够用。看谁被封过:sudo fail2ban-client status sshd。
六、多设备与密钥丢失
换电脑或重装系统后,旧私钥没了等于丢了钥匙:提前把公钥也加到备用设备,或在服务器上保留第二把密钥——authorized_keys 里一行就是一把钥匙,多加一行就有备用。私钥丢失且没有备用钥匙时,只能走云平台的 VNC 控制台或重置密码流程进系统,提前演练一次比出事再查文档强得多。
小结
SSH 加固就四步:生成 ed25519 密钥对、公钥上服务器、禁密码只认密钥、改端口加 fail2ban。配完后用 ssh -v 看一次握手日志,确认走的是 publickey 而不是 password。服务器的安全没有一劳永逸,但把密码登录这扇最大的门关上,剩下的攻击面就只剩你主动开的服务端口了。
- 点赞
- 收藏
- 关注作者
评论(0)