lmo Asked: 2025-01-06 16:21:26 +0800 CST2025-01-06 16:21:26 +0800 CST 2025-01-06 16:21:26 +0800 CST 强制 SSH 私钥密码复杂性 772 如何对用于加密 SSH 私钥的密码短语强制实施密码短语策略? 我喜欢使用 PAMpam_pwquality模块来强制用户帐户密码的复杂性,但我认为我不能将它与 SSH 密钥密码短语一起使用。 ssh 1 个回答 Voted Best Answer grawity 2025-01-06T17:14:35+08:002025-01-06T17:14:35+08:00 如何对用于加密 SSH 私钥的密码强制实施密码策略? 一般来说,您不能。私钥加密是客户端的事情,大多数常用的 SSH 客户端都没有这样的功能(即没有像组策略集成那样的功能),尤其是因为使用不同的 SSH 客户端重新加密密钥很容易绕过此类限制。 更好的方法可能是将私钥存储在硬件中(例如 TPM2 芯片或 Apple 同类芯片,或 PIV/CCID 模式的 Yubikey),这样就不会有文件被盗或以其他方式复制。此类硬件令牌可以限制 PIN 尝试次数,因此可以安全地使用较弱的 PIN(即不会让员工的生活变得麻烦)。 对于 Linux,请查看ssh-tpm-agent或tpm2_pkcs11。(如果您的所有机器都一致具有 TPM2,那么特殊的 ssh-agent 更容易使用。另一方面,如果您混合使用 TPM2 和 Yubikey 或其他智能卡,您将经常处理 PKCS#11。)对于 Windows,不幸的是它自己的 OpenSSH 根本不与 CryptoAPI 集成,但 PuTTY-CAC 应该可以很好地与“平台密钥存储提供程序”配合使用,并且可以将 OpenSSH 连接到 Pageant-CAC 代替 ssh-agent。 或者,使用那些基于其他类型的身份验证颁发短期密钥对的“SSH 证书颁发机构”系统之一 - 员工早上登录并收到仅在当天可用的 SSH 证书(即类似于 Kerberos 的工作方式)。这不完全是 TLS 中的 X.509 证书,但概念上类似 - 您创建 CA 并使用 ssh-keygen 向用户颁发证书。 我相信最新版本的 PuTTY 支持 SSH 证书,因此此方法不再仅限于 OpenSSH。各家公司都在内部编写了此类系统并将其发布在 GitHub 上,通常针对他们自己的工作流程;step-CA软件可能适用于设置此系统。 最后,如果您在 Active Directory 网络中执行此操作,您不妨使用 AD 已经拥有的实际 Kerberos,而不是公钥。该功能在 SSH 中称为“GSSAPI 身份验证”;它要求每台服务器都有一个机器帐户和一个密钥表。这样,唯一的密码或密码短语将是已经受密码复杂性影响的相同 AD 密码。(也可以在没有 AD 的情况下设置。)
一般来说,您不能。私钥加密是客户端的事情,大多数常用的 SSH 客户端都没有这样的功能(即没有像组策略集成那样的功能),尤其是因为使用不同的 SSH 客户端重新加密密钥很容易绕过此类限制。
更好的方法可能是将私钥存储在硬件中(例如 TPM2 芯片或 Apple 同类芯片,或 PIV/CCID 模式的 Yubikey),这样就不会有文件被盗或以其他方式复制。此类硬件令牌可以限制 PIN 尝试次数,因此可以安全地使用较弱的 PIN(即不会让员工的生活变得麻烦)。
对于 Linux,请查看ssh-tpm-agent或tpm2_pkcs11。(如果您的所有机器都一致具有 TPM2,那么特殊的 ssh-agent 更容易使用。另一方面,如果您混合使用 TPM2 和 Yubikey 或其他智能卡,您将经常处理 PKCS#11。)对于 Windows,不幸的是它自己的 OpenSSH 根本不与 CryptoAPI 集成,但 PuTTY-CAC 应该可以很好地与“平台密钥存储提供程序”配合使用,并且可以将 OpenSSH 连接到 Pageant-CAC 代替 ssh-agent。
或者,使用那些基于其他类型的身份验证颁发短期密钥对的“SSH 证书颁发机构”系统之一 - 员工早上登录并收到仅在当天可用的 SSH 证书(即类似于 Kerberos 的工作方式)。这不完全是 TLS 中的 X.509 证书,但概念上类似 - 您创建 CA 并使用 ssh-keygen 向用户颁发证书。
我相信最新版本的 PuTTY 支持 SSH 证书,因此此方法不再仅限于 OpenSSH。各家公司都在内部编写了此类系统并将其发布在 GitHub 上,通常针对他们自己的工作流程;step-CA软件可能适用于设置此系统。
最后,如果您在 Active Directory 网络中执行此操作,您不妨使用 AD 已经拥有的实际 Kerberos,而不是公钥。该功能在 SSH 中称为“GSSAPI 身份验证”;它要求每台服务器都有一个机器帐户和一个密钥表。这样,唯一的密码或密码短语将是已经受密码复杂性影响的相同 AD 密码。(也可以在没有 AD 的情况下设置。)