SSH 密钥登录与安全加固实战
SSH 密钥登录与安全加固实战
密码登录是服务器被暴力破解最常见的入口。一台刚开通的云服务器如果直接用密码开放 22 端口,往往几天内就会在日志里看到大量失败登录记录。本文以一台新购的 Linux 云服务器为例,介绍如何改用密钥登录,并做一套基础的安全加固。
一、为什么优先用密钥登录
口令再复杂也扛不住持续的字典爆破和撞库,而密钥登录的私钥长度通常在 2048 位以上,暴力破解在现实中基本不可行。密钥登录还有两个附带好处:一是不用再记忆和轮换服务器口令,二是配合跳板机和自动化脚本时更方便、更安全。所以只要是长期使用的服务器,都建议把密钥登录作为默认方式。
二、生成密钥对
在本地电脑上生成一对密钥,推荐使用 Ed25519 算法,体积小、速度快、安全性好:
ssh-keygen -t ed25519 -C "user@example.com"
执行后按提示一路回车,会在 ~/.ssh/ 下生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。私钥只保存在本地,绝不要上传到服务器、贴到聊天记录或提交到代码仓库;可以再给私钥设置一个口令短语,即使电脑丢失也能多一层保护。
三、把公钥部署到服务器
最省事的方法是使用 ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys。如果不方便用这个命令,也可以手动复制公钥内容粘贴到该文件末尾。部署后注意权限,权限太松会导致 SSH 拒绝使用密钥:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
然后先别急着关密码登录,另开一个终端窗口测试密钥能否登录成功,确认无误再继续下一步。
四、关闭密码登录
编辑服务器上的 /etc/ssh/sshd_config,确认以下几项:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
把 PasswordAuthentication 设为 no 后,密码登录彻底关闭;PermitRootLogin prohibit-password 则禁止 root 用密码登录,只允许密钥。修改前先备份原配置文件,改完检查语法并重载服务:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sshd -t
sudo systemctl reload sshd
注意不要用 restart 贸然重启,reload 更稳妥;操作期间保持已有会话不断开,万一配置写错还能改回来。
五、改端口与限制来源
22 端口是扫描器的重点目标,改一个不常用端口能挡掉绝大多数无差别扫描:
Port 2222
改完记得放行对应的安全组端口,并用 ssh -p 2222 user@服务器IP 重新连接。条件允许时还可以在安全组或防火墙里只放行公司出口 IP 或跳板机 IP,从源头上缩小暴露面。
六、配套的日常防护
- 安装并启用 fail2ban,对多次失败登录的 IP 自动封禁一段时间。
- 定期检查登录日志:
sudo grep "Failed password" /var/log/auth.log。 - 及时打系统补丁,
sudo apt update && sudo apt upgrade或对应发行版命令。 - 不同服务器使用不同密钥对,私钥配合
ssh-agent管理,避免到处复制同一把私钥。
七、结语
SSH 密钥登录并不复杂:生成密钥、部署公钥、验证登录、关闭密码登录,四步就能把服务器最常见的入侵入口堵上。再配合改端口和 fail2ban,一台服务器的基础安全就达到了可用的水平。建议新开服务器时第一步就做这件事,不要等到日志里出现异常登录后再补救。
- 点赞
- 收藏
- 关注作者
评论(0)