SSH 密钥登录配置与安全加固
密码登录最大的问题不是密码本身,而是它可以被反复猜测。只要服务器暴露在公网上,暴力破解程序就会日夜尝试常见用户名和弱口令,即使你的密码不算太弱,也难免被撞库、社工和历史泄露拖累。改用 SSH 密钥登录,思路就变了:服务器只认一把事先登记好的私钥,攻击者没有这把钥匙,连猜测的机会都没有。本文用最短的路径讲清生成密钥、上传公钥、关闭密码登录、改端口和 fail2ban 的做法。
一、生成密钥对
在自己的电脑上生成密钥对,推荐使用 ed25519 算法,它安全性好、密钥短、速度快:
ssh-keygen -t ed25519 -C "your_email@example.com"
按提示一路回车会生成默认密钥,也可以给私钥设置一个口令。这样即使私钥文件不慎泄露,别人拿到文件也还需要口令才能使用。生成后不要把私钥发给任何人,也不要上传到代码仓库或网盘,私钥只留在自己的设备上。
二、上传公钥并先验证
最省事的办法是 ssh-copy-id,它会自动把公钥追加到服务器的 authorized_keys 文件,并顺手修好权限:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
传完之后先不要断开当前会话,另开一个终端测试密钥登录:
ssh -i ~/.ssh/id_ed25519 user@服务器IP
能免密或只输私钥口令登录,说明公钥已经生效。这一步先验证再改配置,是避免把自己锁在门外的关键。
三、关闭密码登录
编辑服务器上的 sshd 配置:
sudo vim /etc/ssh/sshd_config
把下面两项改成 no:
PasswordAuthentication no
ChallengeResponseAuthentication no
同时确认 PubkeyAuthentication yes。改完检查配置语法并重启服务:
sshd -t
sudo systemctl restart sshd
重启后保留原来的会话不要退出,再开新会话验证一次。如果新会话能用密钥登录,旧会话就可以关闭了。
四、改默认端口并收紧入口
把 Port 22 改成一个不常用的高端口,例如 2222:
Port 2222
改端口不是万能药,但能挡掉大量只扫默认端口的自动化扫描,日志会立刻清净很多。改完要同步放行安全组和防火墙,否则自己也连不上:
sudo ufw allow 2222/tcp
连接时记得带上端口:
ssh -p 2222 user@服务器IP
五、用 fail2ban 做失败感知
安装并启用后,它会盯着认证日志,发现短时间内多次登录失败的 IP 就自动拉黑一段时间:
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
默认规则已经能覆盖 sshd,之后可以用 fail2ban-client status sshd 查看封禁情况。fail2ban 挡的是持续试探,配合密钥登录和改端口,效果会叠加。
六、检查清单
最后留一份检查清单:私钥是否只保存在可信设备上,密码登录是否真的已关闭,root 是否禁止直接登录,是否只放行了必要的端口和来源,重要操作前是否备份了 sshd_config。遇到密钥登录失败时,先看权限:.ssh 目录应为 700,authorized_keys 应为 600,属主必须是登录用户本身。把这几步做扎实,一台面向公网的服务器就已经比只靠密码时安全得多。
- 点赞
- 收藏
- 关注作者
评论(0)