云服务器第一道锁:SSH 密钥登录 + 禁用密码登录
刚开好的云服务器,第一件该做的事不是装软件,而是把登录方式换掉。默认的密码登录有一个致命弱点:密码是可以被猜的。公网上的扫描器 24 小时不停地对 22 端口做字典爆破,用户名就那么几个常见的(root、admin、ubuntu),一旦密码强度不够,服务器就等于把门钥匙交给了陌生人。密钥登录换掉的是整个验证方式:服务器只认你手里那把私钥,猜密码的人连参与验证的资格都没有。
第一步:本地生成密钥对
在你自己的电脑上生成一对 ed25519 密钥,不要在服务器上生成私钥再下载回来——私钥从生成那一刻起就应该只待在你自己的机器上:
ssh-keygen -t ed25519 -C “你的邮箱”
一路回车会得到默认路径 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。给私钥设一个口令短语(passphrase)是值得的:就算电脑丢了,捡到私钥的人还得再过一关。公钥可以公开,私钥绝不能发给任何人、贴到任何公开地方。
第二步:把公钥放到服务器上
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
这条命令会把公钥追加到服务器 ~/.ssh/authorized_keys,并顺手把目录和文件权限修到 SSH 要求的严格值。做完后先别急着改配置,新开一个终端窗口,用密钥登录一次,确认能免密(或只输私钥口令)进来:
ssh -i ~/.ssh/id_ed25519 user@服务器IP
这一步是整篇文章最重要的一句:在确认密钥登录可用之前,绝不要关掉当前这个已经登录的会话。关配置、改错了、被锁在门外,全靠这个还开着的窗口救回来。
第三步:关掉密码登录
确认新会话能进之后,再改服务器配置。改的是 /etc/ssh/sshd_config,关键两行:
PubkeyAuthentication yes
PasswordAuthentication no
有条件的话顺手把键盘交互认证也关掉(KbdInteractiveAuthentication no),免得留下一个等价的密码口子。改完先检查语法,再 reload,不要直接 restart 断掉现有连接:
sudo sshd -t
sudo systemctl reload sshd
reload 后再新开一个会话验证一次:能进,说明密钥通道正常;用密码登录故意试一次,应该被拒绝——这才是你想要的状态。root 直接登录也可以一并收紧(PermitRootLogin prohibit-password),日常用普通用户加 sudo 就够了。
第四步:再加两层,不贵但有效
第一层是安全组:22 端口只放行你自己的出口 IP,而不是 0.0.0.0/0。IP 会变的话,至少做到非必要不长期全开。第二层是 fail2ban:它盯着登录失败日志,某个 IP 短时间内失败次数超标就自动封禁一段时间,让爆破扫描的成本陡增。这两层挡不住有针对性的攻击,但能把 99% 的自动化扫描挡在门外。
万一密钥丢了怎么办
先别慌,云厂商一般都留了后门——不是漏洞,是给你准备的救援通道:控制台的 VNC / 串口终端可以直接登录,不走 SSH;或者通过控制台重置密码、挂载磁盘改回配置。救援通道本身也要保护好:控制台账号开 MFA、密码单独保管。平时把私钥备份到加密 U 盘或密码管理器,不要只存在一台电脑上,也不要备份到公开网盘的明文文件里。
一句话总结
顺序不能乱:生成密钥 → 放上公钥 → 新会话验证通过 → 关密码登录 → 再验证一次。跳过验证那一步直接关密码,是新手把自己锁在服务器外最常见的死法。锁装好之后,爆破日志会立刻安静下来——那是你第一天就该给服务器的东西。
- 点赞
- 收藏
- 关注作者
评论(0)