将 SSH 密钥与 Kerberos 结合使用

将 SSH 密钥与 Kerberos 结合使用

我们公司遇到了一个问题,导致我过去一周一直很烦恼:

我们有数百台服务器(CentOS6/7 的混合版本,如果有必要的话),团队每天都需要快速通过 SSH 连接这些服务器。每个人都在使用 mRemoteNG 或 SuperPutty,因为它们能够保存和组织连接信息,而且标签式连接是必不可少的。目前,每个人都共享一个 SSH 密钥来登录所有服务器。显然,我们目前的做法很糟糕,所以我们想做的是给每个用户一个单独的帐户和密钥,以便在各个服务器之间使用。

环顾四周,似乎 Kerberos 是管理多个用户和处理大量服务器身份验证的完美选择。不幸的是,我们似乎在让它按我们想要的方式工作时遇到了一些问题。我们能够设置 Kerberos 来处理有密码的用户的 SSH 连接,但当涉及到禁用密码和使用 SSH 密钥时,我们无法弄清楚。

我们也研究过使用 Kerberos 密钥表,但是我们无法通过 PuTTY 让它们工作,或者找到可行的解决方案来保存连接信息并使用密钥表进行选项卡式连接。

这里的主要问题是:Kerberos 是否可用于管理具有 SSH 密钥的 SSH 用户?如果不能,是否有可与 Kerberos 密钥表配合使用的 PuTTY 版本,或者可以组织并具有选项卡式连接的替代方案?谢谢!

答案1

首先,澄清一下。Kerberos 和 SSH 密钥是 SSH 的两种互斥身份验证方法。您不使用 KerberosSSH 密钥。您使用 Kerberos代替SSH 密钥。两者都允许“无密码” SSH 登录。Kerberos 协议可能是有序的。

使用 Kerberos,您需要在尝试连接到端点之前获取 TGT 来证明您就是您所说的那个人。如果您在加入 Active Directory 域的 Windows 上,则登录时会自动获得 Active Directory 领域的 Kerberos TGT。但许多组织并不费心配置他们的 Linux 主机以使用 Active Directory Kerberos 领域。如果您这样做,生活就会轻松得多。如果您不这样做,则意味着需要配置 Windows 以了解您的其他 Kerberos 领域以及如何请求票证。这对您的用户来说也是一个额外的步骤,因为他们需要放弃他们的 AD TGT 并为您的其他领域请求 TGT。

您还可以选择在 Kerberos 领域之间使用信任,以便(例如)AD 用户可以对其他 Kerberos 领域中的资源进行身份验证。

Kerberos 密钥表文件只是您的 Kerberos 帐户密码的文件表示。因此,在请求初始 TGT 时,如果您有一个有效的密钥表文件,则无需输入密码。但这通常也超出了 SSH 客户端的范围。

获得有效的 TGT 后,您需要确保您的 SSH 客户端已配置为使用 GSSAPI。PuTTY 开箱即用,我相信大多数其他客户端也支持此功能。

假设所有配置都正确,它应该“正常工作”。但在此过程中可能会发生许多配置失误。还有许多第三方产品可以使事情变得更容易,但我不会提及任何具体内容。

答案2

PuTTY 0.61 或更新版本可以使用 Kerberos/GSSAPI 票证(而不是公钥身份验证)来向 SSH 服务器进行身份验证。要启用此功能,请进入 PuTTY 的配置菜单,选择“连接 | SSH | 身份验证 | GSSAPI”,并确保已启用“尝试 GSSAPI 身份验证”。(Linux OpenSSH 客户端的等效项是“ssh -K”。)

PuTTY 可以通过两种方式获取所需的 Kerberos 票证授予票证:

  1. 当您登录到域中的 Windows 计算机时,PuTTY 可以访问 Windows 从其 Active Directory 域服务器获取的任何票证。在这种情况下,无需执行任何特殊操作即可获取票证。

  2. 或者(例如,在不在域中的 Windows 计算机上),PuTTY 还可以访问你通过运行“MIT Kerberos for Windows”软件包附带的“MIT Kerberos Ticket Manager”GUI 工具获得的任何票证。http://web.mit.edu/kerberos/dist/)。只需在启动 PuTTY 之前使用它来获取您的 Kerberos 票证。如果“MIT Kerberos 票证管理器”正在运行,它将自动提示您输入您的 Kerberos 密码(如果 PuTTY 需要)。因此,最好将“MIT Kerberos 票证管理器”的快捷方式添加到您的启动文件夹中。

在sshd服务器端:

  • 从您的 KDC 获取并在 /etc/krb5.keytab 中安装服务器密钥表。

  • 确保/etc/ssh/sshd_config您必须GSSAPIAuthentication yes启用 Kerberos 身份验证。

确保krb5.conf双方都正确设置,以便 putty 和 sshd 使用的 GSSAPI 库都能找到相同的领域并联系相同的 KDC(除非您的领域和 KCD 已经通过 DNS 正确公布,在这种情况下无需添加任何内容krb5.conf)。

答案3

我知道 cygwin 中的 ssh 会支持 keytabs。

按照以下说明在 cygwin 中设置 kerberos 和 ssh: http://computing.help.inf.ed.ac.uk/kerberos-cygwin

不要执行步骤‘kinit username’,而是执行:

kinit -kt /path/to/keytab username

(然后正常 ssh。)

相关内容