黑客天天扫你的服务器?关掉密码登录,用 SSH 密钥对一把锁死暴力破解

为什么你的服务器总在被“敲门”?

如果你刚买了云服务器,装好系统,美滋滋地准备部署网站,登录后台一看日志——好家伙,满屏都是“Failed password for root”的记录。IP 地址来自天南海北,从俄罗斯到巴西,从凌晨两点到早上七点,一刻不停地在试探你的密码。

这就是互联网上最普遍的“暴力破解”攻击。黑客利用自动化脚本,拿着庞大的密码字典,对全球范围内暴露在公网上的 SSH 端口(默认 22)进行地毯式扫描。如果你的服务器还在使用传统的“用户名+密码”方式登录,那基本上等于把家门钥匙挂在门外,只等着哪个“幸运”的字典词条把它撞开。

密码登录不仅繁琐(每次都要输入一串复杂字符),而且天生存在被窃听、被撞库的风险。相比之下,SSH 密钥对登录就像是给你的服务器配了一把独一无二的生物锁——公钥放在服务器上,私钥牢牢掌握在你手里。没有私钥,哪怕黑客知道你的用户名,也只能在门外干瞪眼。

今天,我们就来手把手把这套安全机制搭起来。顺便提一句,在开始之前,如果你还没有一台靠谱的云服务器,腾讯云4核4G轻量服务器真实跑分:性能到底够不够用?我们实测给你看,选择一台性能足够的机器是安全的基础。

第一步:在你的本地电脑上生成密钥对

密钥对由两部分组成:私钥(private key)公钥(public key)。私钥要像宝贝一样藏好,公钥则可以放心地放到任何你需要登录的服务器上。

Windows 用户(推荐使用 PowerShell 或 WSL)

新版 Windows 10/11 已经内置了 OpenSSH 客户端。按下 Win + R,输入 powershell,然后执行以下命令:

ssh-keygen -t ed25519 -C "your_email@example.com"

这里我们选择 ed25519 算法,它比传统的 RSA 更安全、速度更快,而且生成的密钥更短。如果你需要兼容一些非常老旧的系统,也可以用 ssh-keygen -t rsa -b 4096

命令执行后,系统会问你保存路径,默认保存在 C:\Users\你的用户名\.ssh\id_ed25519,直接回车即可。接着会让你设置一个私钥密码(passphrase),笔者强烈建议你设置一个!这相当于给私钥本身再加一道锁,就算私钥文件泄露,对方没有密码也白搭。

macOS / Linux 用户

打开终端,执行同样的命令:

ssh-keygen -t ed25519 -C "your_email@example.com"

流程完全一样。生成后,你会在 ~/.ssh/ 目录下看到两个文件:id_ed25519(私钥)和 id_ed25519.pub(公钥)。

第二步:把公钥部署到云服务器上

这一步就是把你的“锁芯”装到服务器门上。假设你的服务器 IP 是 123.123.123.123,用户名是 root(建议之后禁用 root 直接登录,但初期先搞定密钥)。

方法一:一键部署(推荐)

在本地终端执行:

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@123.123.123.123

这个命令会自动把你的公钥追加到服务器上 ~/.ssh/authorized_keys 文件中。如果提示你输入密码,输入服务器的 root 密码即可。

方法二:手动复制粘贴

如果 ssh-copy-id 用不了,可以手动操作:

  1. 在本地查看公钥内容:cat ~/.ssh/id_ed25519.pub,复制输出的整段文本。
  2. SSH 登录到服务器(用密码),执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "这里粘贴你复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

注意,chmod 权限设置非常关键,如果权限不对,SSH 服务会直接忽略这个文件。

第三步:测试密钥登录,然后彻底禁用密码

现在,在本地尝试用密钥登录:

ssh root@123.123.123.123

如果一切正常,你应该直接登录进去,不再需要输入密码(除非你设置了私钥密码,那就只需要输入那个密码)。

确认密钥登录没问题后,最狠的一步来了:编辑 SSH 配置文件,彻底堵死密码登录这条路。

sudo vim /etc/ssh/sshd_config

找到并修改以下几行:

# 禁用 root 密码登录(强烈建议同时禁用 root 直接登录,用普通用户+sudo)
PermitRootLogin prohibit-password

# 关闭密码认证
PasswordAuthentication no

# 关闭空密码
PermitEmptyPasswords no

# 启用公钥认证(确保是 yes)
PubkeyAuthentication yes

保存退出后,重启 SSH 服务:

sudo systemctl restart sshd

现在,再试试用密码登录——系统会直接拒绝连接。至此,你的服务器已经对暴力破解说“不”了。

进阶加固:修改端口与二次验证

虽然密钥已经足够安全,但黑客的扫描脚本依然会孜孜不倦地尝试连接 22 端口。为了减少日志噪音,我们还可以把 SSH 端口改掉。

/etc/ssh/sshd_config 中找到 #Port 22,改成 Port 2222(或者其他 1024-65535 之间的端口)。记得在云服务商的安全组/防火墙规则中放行新端口,并关闭旧端口。关于防火墙的详细配置,可以参考我们之前写过的 别再裸奔了!Linux服务器安全加固与UFW防火墙配置,这些坑我替你踩过了,那里有更全面的安全策略。

如果你追求极致安全,还可以考虑配合 Fail2BanGoogle Authenticator 做二次验证。不过对于大多数个人站长来说,密钥登录 + 修改端口已经足够应对 99% 的扫描攻击。

常见翻车现场与修复

症状 原因 解决方案
登录时提示“Permission denied (publickey)” 公钥未正确部署,或 authorized_keys 权限不对 检查 ~/.ssh 权限是否为 700,authorized_keys 是否为 600,并确认公钥内容准确
修改配置后无法登录 配置语法错误,或防火墙未放行新端口 使用云厂商的 VNC 控制台登录服务器,检查 /etc/ssh/sshd_config 语法,或者回退配置重启服务
提示“Bad owner or permissions on .ssh/config” 本地 .ssh 目录或私钥文件权限过松 在本地执行 chmod 600 ~/.ssh/id_ed25519chmod 700 ~/.ssh

写在最后:安全是一套组合拳

配置好 SSH 密钥登录,只是服务器安全万里长征的第一步。接下来你还需要关注 Web 服务的安全、数据库的安全、以及定期备份。比如,当你搭建好网站后,可以参考 从裸机到HTTPS:Nginx反向代理配置与免费SSL证书签发,手把手教你搞定 给你的站点加上 HTTPS 加密。

如果你的网站是 WordPress 搭建的,别忘了用 网站慢如蜗牛?用Redis缓存加静态资源优化,让你的WordPress飞起来 提升性能。

最后,选一台靠谱的服务器是这一切的基础。如果你还在纠结配置,不妨看看 腾讯云4核4G轻量服务器性能深度实测:跑分、压测与真实项目部署全记录,了解真实性能表现再做决定。

从今天起,关掉密码,用密钥守护你的服务器。你会发现,世界清静了许多。

延伸阅读推荐

💡 【站长特惠服务推荐】

新手搭建网站或部署容器,推荐选择高性价比独享云服务器。点击下方通道可享受限时折扣与专属优惠券:

👉 点此前往领取云服务器限时优惠券

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部