SSH 免密登录:服务器到底是怎么认出你的

举报
yd_252454439 发表于 2026/10/27 08:56:04 2026/10/27
【摘要】 每天第一次登录服务器时,很多人都会好奇:我明明没有输入密码,服务器怎么就敢放我进去?它到底凭什么认定,屏幕前的这个人就是我?答案不在密码里,而在一对钥匙里。先说结论:SSH 免密登录不是不需要验证,而是把“你知道什么”换成了“你拥有什么”。你手里有一把私钥,服务器手里有一把配对的公钥。登录时,服务器不会向你要私钥,而是出一道只有私钥才能解开的题目,你答对了,它就相信你。这对钥匙用 ssh-k...

每天第一次登录服务器时,很多人都会好奇:我明明没有输入密码,服务器怎么就敢放我进去?它到底凭什么认定,屏幕前的这个人就是我?答案不在密码里,而在一对钥匙里。

先说结论:SSH 免密登录不是不需要验证,而是把“你知道什么”换成了“你拥有什么”。你手里有一把私钥,服务器手里有一把配对的公钥。登录时,服务器不会向你要私钥,而是出一道只有私钥才能解开的题目,你答对了,它就相信你。

这对钥匙用 ssh-keygen 就能生成:id_ed25519 是私钥,id_ed25519.pub 是公钥。私钥像家门钥匙,绝不能发给别人、贴到聊天框或传到公开仓库;公钥像锁的形状,可以放心交给服务器。把公钥追加到服务器的 ~/.ssh/authorized_keys 里,就等于告诉服务器:持有对应私钥的人可以进来。

登录过程一共五步:客户端说明想用哪把公钥;服务器在 authorized_keys 里查找,找不到就拒绝;服务器发来一段随机挑战数据;客户端用私钥签名后发回;服务器用公钥验签,通过才放行。整个过程私钥从未离开你的电脑,网络上传的只是挑战和签名,截获了也反推不出私钥。

这比密码更难被攻破。密码会被猜测、撞库和钓鱼骗走,私钥是一串很长的随机数,不需要你每次敲出来。服务器认的也不是你的 IP 或用户名拼写,而是“你是否持有登记公钥对应的私钥”这个数学事实。换一台没有私钥的电脑,哪怕用户名相同也进不去。

当然,免密不等于可以马虎。~/.ssh 应为 700,authorized_keys 应为 600,权限太开放时 SSH 会直接拒绝密钥登录。私钥最好再设一个密码,配合 ssh-agent 使用。生产服务器还建议关闭密码登录、禁用 root 直接登录。

如果配置后仍要求密码,按顺序排查:公钥是否放到了正确用户的 authorized_keys、权限是否正确、服务器是否开启了 PubkeyAuthentication。千万不要把私钥复制到服务器上,那等于把钥匙挂在了门外。下一次免密登录成功时可以想一想:短短几秒,你的电脑完成了一次漂亮的身份证明,而私钥始终没有离开过你的身边。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。