
每次登录服务器,都要输一遍密码。输错了重来,输对了进去干活。日复一日,年复一年。
但你有没有想过:密码这个东西,其实是服务器安全最大的软肋。
某云厂商做过统计,一台暴露在公网的服务器,24小时内被暴力破解尝试的平均次数是2000多次。那些脚本不睡觉,不放假,就盯着你的22端口试密码。
有人会说:“我密码设得复杂,没事。”问题是,密码复杂不代表安全。键盘记录器、中间人攻击、你自己不小心写在代码里,都能让密码泄露。
换成密钥登录吧。不输密码,不怕泄露,配置一次,终身省心。
密钥是什么?——你家有两把钥匙,一把自己留着,一把给门卫
SSH密钥分两半:私钥和公钥。
私钥自己留着,像你家的门钥匙,谁都不能给。公钥放在服务器上,像门卫手里的一份名单——名单上写着“持有某把钥匙的人可以进门”。
登录的时候,服务器把公钥交给你的电脑,你的电脑用私钥签名,服务器验证签名,对了就开门。整个过程不传输密码,不担心泄露。
反常识点:很多人觉得密钥登录“复杂”,其实它比密码更简单——只是第一次配的时候多敲几行命令。配完之后,你再也不用记密码、输密码、改密码。
第一步:生成密钥对(在你的电脑上做)
打开终端(Mac/Linux)或 Git Bash(Windows)。
输入下面这行命令:
bash
ssh-keygen -t ed25519 -C "你的邮箱"
解释一下:
-t ed25519是密钥类型,比老的RSA更快、更安全,推荐用这个-C是注释,写你的邮箱,方便以后知道这是谁的密钥
然后它会问你几个问题:
- 保存路径:直接回车,默认
~/.ssh/id_ed25519 - 密码短语(passphrase):可以设一个,相当于给你的私钥再加一把锁。不设也行,直接回车。
跑完,你的 ~/.ssh 目录下会多两个文件:
id_ed25519:私钥,打死不能给别人id_ed25519.pub:公钥,可以公开,要放到服务器上
真实数据:ed25519 密钥生成比 RSA 4096 快好几倍,而且安全性更高。2020年后新系统都支持。
第二步:把公钥放到服务器上
有几种方法,挑一个你觉得顺手的。
方法一:ssh-copy-id(最简单)
bash
ssh-copy-id user@服务器IP
输入一次密码,它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 里。权限也会帮你设好。
方法二:手动复制
先查看你的公钥:
bash
cat ~/.ssh/id_ed25519.pub
选中输出的内容(以 ssh-ed25519 开头,到你的邮箱结尾),复制。
然后登录服务器(用密码),执行:
bash
mkdir -p ~/.ssh echo "粘贴你复制的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
重点:.ssh 目录权限必须是 700,authorized_keys 文件权限必须是 600。权限错了,SSH会拒绝使用。
第三步:测试密钥登录(别急着重启服务)
先不要关当前的SSH窗口。另开一个终端,测试:
bash
ssh user@服务器IP
如果直接进去了,没问密码,恭喜,密钥登录生效了。
如果还要输密码,检查:
- 公钥内容有没有复制错
- 权限是不是 700 和 600
- 服务器的
/etc/ssh/sshd_config里PubkeyAuthentication是不是yes
保命提醒:在测试通过之前,千万不要关掉原来的SSH窗口。万一密钥没配好,你还能从原来的窗口救回来。
第四步:禁用密码登录(安全加固的最后一步)
确认密钥登录没问题之后,可以关掉密码登录了。
编辑服务器的 /etc/ssh/sshd_config:
bash
sudo vim /etc/ssh/sshd_config
找到这两行,改成这样:
ini
PasswordAuthentication no PubkeyAuthentication yes
保存退出,重启SSH服务:
bash
sudo systemctl restart sshd
再次提醒:不要关掉当前窗口。开个新窗口再测试一次,确保还能登录。如果新窗口能进去,就安全了。如果进不去,马上从原来的窗口把配置改回来。
常见问题:配错了怎么办
Q:我把PasswordAuthentication改成no之后,自己登录不进去了
A:如果你还有另一个窗口开着,进去把配置改回来。如果没有,你需要通过云厂商的“VNC远程连接”或者“救援模式”登录,然后把配置改回去。所以一定要先测试,再关窗口。
Q:私钥丢了怎么办
A:重新生成一对密钥,把新的公钥追加到服务器的 authorized_keys 里。旧公钥不用删,留着也行。
Q:换了电脑,怎么登录
A:把旧电脑的私钥文件(id_ed25519)复制到新电脑的 ~/.ssh/ 目录,权限设成 600。或者重新生成密钥对,把新公钥加到服务器。
Q:多台服务器,每台都要配一遍吗
A:可以重复用同一个公钥,把所有服务器的 authorized_keys 都加上它。或者为每台服务器生成不同的密钥对,看你自己喜欢。
进阶:用 ssh-agent 省掉私钥密码
如果你在生成密钥时设了密码短语(passphrase),每次用私钥都要输一遍。时间长了也烦。
ssh-agent 可以帮你记住密码。启动它,然后把私钥加进去:
bash
eval $(ssh-agent) ssh-add ~/.ssh/id_ed25519
输入一次密码,在当前终端窗口里,下次再用私钥就不用再输了。关掉终端会失效,下次再跑一次就行。
Mac 和 Windows 可以配置成开机自动启动,一劳永逸。
密钥登录不是“高级功能”,是“基础配置”
很多人觉得密钥登录是“高手才用的”。其实不是。它就是服务器安全的标配,就像你家门口换了一把智能锁——第一次安装花点时间,之后每天开门都省事。
你想想,你每天登录服务器多少次?每次都输一遍密码,一年下来浪费多少时间?而且密码越复杂,越容易输错,越容易记不住。
换成密钥,不输密码,不怕暴力破解,不怕键盘记录器,不怕中间人窃听。配置一次,用到服务器退役。
那个在深夜疯狂试你密码的脚本,看到你的服务器只接受密钥登录,会默默换下一家。你则睡你的觉。
这才是服务器该有的样子:它等你,不打扰你。




