告别密码登录:SSH密钥配置实战(安全又省心)

告别密码登录:SSH密钥配置实战(安全又省心)

每次登录服务器,都要输一遍密码。输错了重来,输对了进去干活。日复一日,年复一年。

但你有没有想过:密码这个东西,其实是服务器安全最大的软肋。

某云厂商做过统计,一台暴露在公网的服务器,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 可以配置成开机自动启动,一劳永逸。


密钥登录不是“高级功能”,是“基础配置”

很多人觉得密钥登录是“高手才用的”。其实不是。它就是服务器安全的标配,就像你家门口换了一把智能锁——第一次安装花点时间,之后每天开门都省事。

你想想,你每天登录服务器多少次?每次都输一遍密码,一年下来浪费多少时间?而且密码越复杂,越容易输错,越容易记不住。

换成密钥,不输密码,不怕暴力破解,不怕键盘记录器,不怕中间人窃听。配置一次,用到服务器退役。

那个在深夜疯狂试你密码的脚本,看到你的服务器只接受密钥登录,会默默换下一家。你则睡你的觉。

这才是服务器该有的样子:它等你,不打扰你。

知识库

服务器故障排查实战手册:从现象到根因的7步法

2026-3-23 14:22:33

网站安全

超越单点智能:2026年,如何编织你的“韧性架构”网络?

2026-2-3 14:16:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧