SSH 密钥登录配置与安全加固

举报
yd_299492234 发表于 2026/11/02 08:38:14 2026/11/02
【摘要】 密码登录最大的问题不是密码本身,而是它可以被反复猜测。只要服务器暴露在公网上,暴力破解程序就会日夜尝试常见用户名和弱口令,即使你的密码不算太弱,也难免被撞库、社工和历史泄露拖累。改用 SSH 密钥登录,思路就变了:服务器只认一把事先登记好的私钥,攻击者没有这把钥匙,连猜测的机会都没有。本文用最短的路径讲清生成密钥、上传公钥、关闭密码登录、改端口和 fail2ban 的做法。 一、生成密钥对在...

密码登录最大的问题不是密码本身,而是它可以被反复猜测。只要服务器暴露在公网上,暴力破解程序就会日夜尝试常见用户名和弱口令,即使你的密码不算太弱,也难免被撞库、社工和历史泄露拖累。改用 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,属主必须是登录用户本身。把这几步做扎实,一台面向公网的服务器就已经比只靠密码时安全得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。