如何使用公钥认证比使用更安全密码验证,考虑到以下事实:
- 默认 SSH 端口已从其默认
- 防火墙在多次尝试失败后将 IP 列入黑名单
- 密码看起来相当复杂(14-20无意义的字符)
答案1
- 您的密码有 12 个字符,每个字符 6 位,即 72 位随机性。SSH 密钥至少有 2048 位,这很难猜到。
- SSH 密钥存储在您的客户端上,仅 SSH 客户端可以访问,您甚至都不知道。密码通常用于其他目的(泄露的可能性更高)并输入到不受信任的环境中。
- 在 MITM 攻击下,尝试使用 SSH 密钥进行身份验证不会泄露私钥,而尝试密码身份验证则会泄露密码。
答案2
假设有人从你的键盘下偷走了便签,从而窃取了你的密码?或者使用橡胶软管。如果禁用密码验证,它将几乎毫无用处。
答案3
公钥身份验证更强大,因为 AAA 依赖于密钥对,实际上是一个数学身份,而不是一串字符(密码)。必须拥有公共部分才能成功进行身份验证,而您不能只是靠在肩膀上或用橡胶管拿到它。至于关于 MITM 的评论...好吧,ssh 不会以明文形式传输密码。
当然,除了公钥之外,你还可以做更多的事情:
- 限制可以连接到该系统的源 IP
- 主机防火墙
- TCP 包装器
- 反向代理
- 在 sshd_config 中使用“AllowUsers”和“Allowgroups”
- 使用 PAM,有各种模块可以应用更多安全过滤
- 需要公钥认证和密码,
- 在 sshd_config 中设置“PermitRootLogin No”
- 在 sshd_config 中将“ServerKeyBits”设置为 2048
- 生成 2048 位或更大的公钥
公钥认证的替代品?
- 使用 S/MIME,生成一次性密码列表