SSH 密钥登录实战:给服务器换一把更稳妥的锁
刚开始管服务器的时候,我习惯用密码登录,觉得方便。直到有一天看 auth.log,发现一夜之间多了上万条失败登录记录,才意识到公网上的服务器每时每刻都在被人拿着密码字典撞。换成密钥登录之后,世界清净了很多。这篇记录一下我自己的完整做法和踩过的坑。
第一步,在本地生成密钥对。现在推荐 Ed25519 算法:ssh-keygen -t ed25519。一路回车会在 ~/.ssh 下生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。私钥相当于家门钥匙,只留在本地,千万不要上传到任何服务器或网盘;公钥是可以公开的锁芯,装到服务器上。
第二步,把公钥装到服务器上。最省事的是 ssh-copy-id user@服务器IP,它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 并修正权限。如果 ssh-copy-id 不可用,也可以手动复制 .pub 文件里那一整行内容,粘贴到服务器的 authorized_keys 里。这里有个高频坑:权限必须对——~/.ssh 目录 700、authorized_keys 文件 600,所有者必须是登录用户本人。权限过宽时 sshd 会直接拒绝密钥登录,而且日志里还不一定写得很明白,排查时要先想起这一条。
第三步,先开一个新窗口测试密钥能否登录,确认没问题之后,再考虑关掉密码登录。修改 /etc/ssh/sshd_config:PasswordAuthentication no、PermitRootLogin prohibit-password,改完先执行 sshd -t 检查语法,再 reload 服务。特别强调一句:改配置时原来的会话不要关,万一配置写错,还能从旧会话里改回来。我见过有人改完立刻断开,结果把自己锁在门外,最后只能去云厂商控制台走 VNC 救援。
第四步,再加两道保险。一是 fail2ban,监控失败登录并自动封禁恶意 IP;二是云服务器的安全组只放行需要的端口,没用的端口不要对全网开放。至于改默认端口,只能减少日志噪音,不算真正的安全措施,心里要有数。
最后是日常习惯:每台重要服务器用独立密钥,给私钥设口令并用 ssh-agent 管理,设备丢失或人员变动时,第一时间从 authorized_keys 里删掉对应那一行。密钥登录不是银弹,但它把“被字典撞开”这个最常见的风险降到了接近零,值得给每一台公网服务器都配上。
- 点赞
- 收藏
- 关注作者
评论(0)