SSH 密钥:从生成、免密登录到安全轮换
每次 SSH 登录都要输密码,麻烦还是其次,更大的问题是弱密码会被全网扫描爆破。改成密钥登录后,服务器只认你手里的私钥,密码爆破就无从下手。下面是个人服务器上最常用的一套做法。
一、生成密钥对
本地执行一条命令即可:
ssh-keygen -t ed25519 -C "my-laptop-2026"
ed25519 是目前推荐的算法,密钥短、速度快、安全性足够,没必要再用 RSA 2048。-C 后面的注释只是备注,写设备名方便以后分辨。命令会生成两个文件:~/.ssh/id_ed25519(私钥,绝不外传)和 ~/.ssh/id_ed25519.pub(公钥,可以公开)。生成时设一个 passphrase,相当于给私钥再加一把锁——即使私钥文件泄露,没有这句口令也用不了。
二、把公钥发到服务器
最省事的是 ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 里,并顺手把目录权限修好。没有这个工具时也可以手动复制,但要注意两处权限:.ssh 目录必须是 700,authorized_keys 必须是 600,权限太松会被 sshd 直接忽略,表现为"密钥明明放了却还是要密码"。
三、用 config 文件告别记 IP
主机一多,靠命令行记 IP 和端口很快会乱。在本地 ~/.ssh/config 里写别名:
Host myserver
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
以后 ssh myserver 就能直连。不同主机用不同密钥时各写各的 IdentityFile,再加一行 IdentitiesOnly yes,避免客户端把所有密钥挨个试一遍,既慢还可能触发服务器的失败次数限制。
四、关掉密码登录之前,先留一条后路
确认密钥能免密登录后,再去服务器上关密码登录。改 /etc/ssh/sshd_config,把 PasswordAuthentication 设为 no,然后 systemctl reload sshd。关键的一步是:改之前先保持一个已经连上的 SSH 会话不要断,改完再新开一个会话验证,确认没问题才退出旧会话。否则一旦配置写错,自己也会被锁在门外,只能走服务商的控制台救援。
五、密钥也要定期轮换
密钥不是一劳永逸的。建议每年换一次,或者换电脑、怀疑泄露时立刻换。流程很简单:本地生成一对新密钥,把新公钥追加到服务器的 authorized_keys,确认新密钥能登录后,再把旧公钥那一行删掉。删旧密钥之前务必先验证新密钥——顺序反了,同样是把自己锁在门外。
私钥文件要像密码一样保管:不要发到聊天记录、不要塞进公开仓库、不要和别人共用一把。实在需要在多台设备登录,就每台设备各生成一对,服务器上只多加一行公钥,某台设备丢了就只删它那一行,影响范围最小。
密钥登录看着步骤多,实际做一次只要十分钟。换来的是一台不再怕密码爆破的服务器,和再也不用每次敲密码的日常,这笔买卖很值。
- 点赞
- 收藏
- 关注作者
评论(0)