![SSH 的最长密码是多少?](https://linux22.com/image/510299/SSH%20%E7%9A%84%E6%9C%80%E9%95%BF%E5%AF%86%E7%A0%81%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
SSH 密码最长是多少(多少个字符)?
我喜欢强而长的密码,但不知道字符限制。
谢谢。
答案1
没有固定的最大长度。您的密码不会被存储,而是会存储您的密码的“加盐哈希值”,通常在 /etc/shadow 文件中,该文件的长度始终是特定的。即使您的密码超过 50 个字符,密码的哈希值表示也会小得多。
一定要使用强密码,但密码应该易于使用和记忆 - 如果密码太长,您可能最终需要将其写下来,这可能比较短的密码带来更大的安全隐患。
答案2
问题和答案中都混杂了一些东西。让我们理清一些。
SSH 不对密码长度施加任何限制。事实上,SSH 根本不了解您的密码。它有几种身份验证模式,包括密钥(例如其他地方提到的 RSA)和键盘交互,这允许您使用密码。在键盘交互模式下,您只需将密码传递给后端的任何内容。
通常对于类 Unix 服务器来说,后端是可插入身份验证模块 (PAM)。情况并非总是如此,但例外并不常见。
反过来,PAM 支持多个后端来验证您的密码。人们一直在讨论的那个 — /etc/shadow
— 是pam_unix
后端的一部分。Pam_unix 将您在键盘交互模式下输入的身份验证令牌与 /etc/shadow 文件中的哈希密码进行对比。严格来说,这里对密码长度也没有限制,但对密码有意义的长度有限制。这取决于所使用的哈希。
如上所述,传统的 Unix DES 加密仅关注密码的 8 个字母(56 位)。您可以使用更长的密码,但前 8 个字符以外的所有内容都会被丢弃。(我从未听说过,正如其他人所说,MD5 哈希仅使用 8 个字符,我不认为这是真的。如果是这样,那么该约束是在 PAM 工具中的某个地方实现的,而不是在哈希本身中实现的。)
也就是说,哈希的位长度决定了两个密码之间可能的碰撞空间,因此决定了密码的长度越长就越安全。MD5 为 128 位;SHA1 为 160 位;SHA256 为 256 位,等等。
因此对于 pam_unix:
- 密码长度没有物理限制。
- ...尽管一些使用您的密码的工具可能具有有限的缓冲区大小并会截断它或崩溃。
- 只有 DES 将密码的有用长度限制为 8 个 7 位 ASCII 符号。
- 其他任何设置都允许无限长的密码。
但请稍等!Pam_unix 不是唯一的后端!
许多服务器(尤其是企业环境中的服务器)使用 LDAP 或 Active Directory 后端进行身份验证。原则上,这些后端可能有自己的密码长度限制 - 但这不是 SSH 属性,而是目录服务属性。您需要在社区中询问这些服务。但实际上,我也不认为您会在任何常见的 LDAP 或 AD 部署中遇到任何密码长度限制。如果遇到,几乎可以肯定是基础设施薄弱或受到损害。
因此,请尽情输入密码吧 - 建议至少输入 16 个字符,尽管根据我要保护的内容,我最多使用过 75 个字符 - 然后设置 RSA 身份验证,这样您就不必输入太多字符。
答案3
如果密码以 DES 或 MD5 格式存储,则只有前 8 个字符有意义。SHA 密码没有这样的限制。crypt(3)
有关详细信息,请参阅手册页。
答案4
https://www.rfc-editor.org/rfc/rfc4253-- SSH 是一种用于与远程终端通信的安全协议,不使用密码(它使用加密密钥协商)。也就是说,一旦您连接到远程终端,您通常会看到“每日消息”(MOTD)并被要求输入登录凭据,其规则由远程终端的操作系统决定。(溢出名称或密码字段的字符缓冲区是一个反复出现的安全漏洞)常见的限制长度为 8、32 和 255 个字符。