SSH 免密登录:服务器到底是怎么认出你的
每天第一次登录服务器时,很多人都会好奇:我明明没有输入密码,服务器怎么就敢放我进去?它到底凭什么认定,屏幕前的这个人就是我?答案不在密码里,而在一对钥匙里。
先说结论: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。千万不要把私钥复制到服务器上,那等于把钥匙挂在了门外。下一次免密登录成功时可以想一想:短短几秒,你的电脑完成了一次漂亮的身份证明,而私钥始终没有离开过你的身边。
- 点赞
- 收藏
- 关注作者
评论(0)