首先,一些背景知识。
如今,如果您处于主要是 Windows Server AD 环境中,只有少量 Linux 服务器,您可以选择通过 SSH 向服务器进行身份验证:
- 通过 SSH 使用证书身份验证管理 Linux 服务器(正常的 Linux 方式)
- 将 Linux 服务器加入您的 AD 域 (realm+sssd),并通过 SSH 使用用户名/密码身份验证来管理它们
问题是,选项 1 让管理员需要管理一组与环境其他部分不同的凭据,而选项 2 则让管理员在计算机完全相互识别之前通过网络直接向远程服务器提供密码。
在 Windows 世界中,这是通过网络级身份验证解决的(至少对于 RDP,我知道应该避免)。该过程的简化版本如下所示:
- 用户开始连接到远程计算机
- 远程计算机使用 AD 计算机帐户令牌进行响应
- 本地计算机验证令牌、查看 NLA 支持并向用户显示凭据对话框
- 用户使用凭据完成对话框
- 本地计算机通过域控制(而不是远程计算机)验证凭据
- DC 为本地计算机提供身份验证令牌
- 本地计算机将令牌呈现给远程计算机
- 远程计算机根据域验证令牌
- 成功后,用户将被允许访问远程计算机。
实际上,该过程甚至可以更简单,用户首次登录本地计算机时为用户创建的现有身份验证令牌已经可以使用。
这是一个复杂的过程,我在描述它时肯定犯了错误。关键是身份验证令牌取代了 Linux 故事中的证书,这样用户就永远不会向潜在未知的机器提供实际凭据。此外,各方对可信 DC 的依赖使得事情比 Linux 的故事更好,因为用户不必管理自己的证书,即使通过他们自己的软件(而不是为他们提供的软件)也是如此。
现在回答这个问题。有没有办法获得类似的方法来验证与 AD 加入的 Linux 服务器的 SSH 会话,其中服务器永远不会看到用户凭据,但用户体验仍然是 Windows 本地凭据验证?
有很多问题需要解决,但本质上需要的是“kerberized”SSH 或其他什么。NLA 还提供了一个额外的步骤(此处未指定),即在身份验证得到验证之前不提供控制台会话(创建该会话的资源成本很高)。
更重要的是,除了令人望而却步的复杂性之外,我认为对此没有太大兴趣,因为已经有了解决方法。使用堡垒跳转主机作为 Linux 主机的前端,禁止其他人的访问/端口类型。该堡垒主机可以是 Windows,并支持所有缺少的功能。
堡垒跳转主机在 AD 环境中也变得越来越常见,允许对受保护资源进行 RDP 等类型的访问。
同样对于 RDP 示例,凭据实际上并未受到服务器的保护。这是通过使用 /RemoteGuard 开关来解决的。
https://learn.microsoft.com/en-us/windows/security/identity-protection/remote-credential-guard
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/mstsc