为什么 ssh 用密钥比用密码更安全?你有没有发现一个现象,现在的 linux 服务器、云主机、网络设备越来越多,都在要求禁止密码登录,只能用 ssh 密钥。很多人会问,密码不也是加密传输的吗?为什么非要搞这么麻烦的密钥?今天 我们就把这件事讲透。第一幕,先说密码登录的问题。 ssh 的 密码登录本质是你输入一个秘密,服务器判断对而不对。虽然传输过程是加密的,但问题出在验证方式上,密码可以背时,只要密码登录开启,就一定会面对这三件事, 暴力破解,字典攻击、壮酷攻击,哪怕你用的是 admin at 二零二五感叹号、 at 警号,攻击者也可以每秒试几百次,二十四小时不停。在日制中,你会看到 failed password for root from x x。 问题二,密码是共享秘密。密码有一个致命特性,客户端和服务器知道的是同一个东西,一旦密码泄露,谁拿到,谁就能登录。而且你还得做这些事,定期改密码,通知所有人,防止被记在小本子上。第二幕, s s h 密要到底是啥? s s h 密要不是高级密码,它是一堆东西。私要在你本地,公要在服务器, 他们的关系是,公要可以验证你,但推不出私要,服务器只保存公要,永远没有你的私要,这点非常关键。第三幕,密要登录是怎么工作的?我们用一句话把流程你发起,连接服务器说证明你是你自己, 服务器给你一个随机挑战。你用私要签名,服务器用公要验证全程过程中没有传密码,没有共享秘密,没有可被试的值,攻击者就算抓包也只能看到一次性的加密数据。第四幕,为什么密要几乎不怕暴力破解?因为攻击面不一样。密码攻击是这样,我猜一个, 你试试对不对?密钥攻击必须这样,我要算出你的私钥。而现实是, rsa two zero four eight eight two five five one nine。 破解难度约等于让宇宙热祭之后再回来看看。所以你会看到一句话, ssh 密钥不是靠复杂,而是靠不可能。第五幕, 密钥还能做哪些密码做不到的事?可以不输入任何东西,自动化运为脚本。 c i c d 可以 精确控制权限,只能执行某个命令,不能登录 s h e l l 三,可以随时单点失效删一行公钥,不影响别人不向密码一改,全体遭殃。第六幕, 那密钥就绝对安全吗?也不是真正的风险在私钥被偷,私钥没加密,私钥满世界考。所以工程师的正确姿势是,私钥加 passphrase, 权限六百,设备丢了立刻删公钥。 一句话,密码你猜对了就行。 s s h 密钥,你必须证明你是你。所以在生产环境里,借密码,家用密钥等于基本操作。结尾,京剧密码是记住的秘密,密钥是算不出来的证明。