通过Kerberos使用SSH密钥

所以在我们公司遇到了一个问题,导致我过去一周把头发拉出来:

我们有数百个服务器箱(如果有的话,CentOS6 / 7的组合)需要在一个团队之间每天快速接入SSH服务器。 每个人都使用mRemoteNG或SuperPutty作为保存和组织连接信息以及标签连接的必备条件。 目前,每个人都共享一个SSH密钥login到所有的盒子。 显然,我们目前的做法是一个可怕的想法,所以我们想要做的是给每个用户一个个人账户和密钥在整个框中使用。

环顾四周,似乎Kerberos是pipe理多个用户和在大量服务器上处理authentication的理想select。 不幸的是,我们似乎在按照我们想要的方式工作时遇到了一些问题。 我们可以设置Kerberos来为使用密码的用户处理SSH连接,但是当禁用密码和使用SSH密钥时,我们无法弄清楚。

我们也考虑使用Kerberos keytabs,以及我们无法让他们通过PuTTY工作,或find一个可行的解决scheme来保存连接信息,并与keytabs选项卡连接。

这里的主要问题是:Kerberos可以用SSH密钥pipe理SSH用户吗? 如果没有,是否有可用的PuTTY版本与Kerberos密钥表一起使用,还是可以组织并具有选项卡式连接的替代版本? 谢谢!

PuTTY 0.61或更高版本可以使用Kerberos / GSSAPI票证(而不是公共密钥身份validation)对SSH服务器进行身份validation。 要启用此function,请在PuTTY的configuration菜单中select“Connection | SSH | Auth | GSSAPI”并确保启用“尝试GSSAPI身份validation”。 (Linux OpenSSH客户端等价物是“ssh -K”。)

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

  1. 当您login到域中的Windows计算机时,PuTTY可以访问Windows从其Active Directory域服务器获得的任何票据。 在这种情况下,没有必要做任何特别的事情来获得一张票。

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

在sshd服务器端:

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

  • /etc/ssh/sshd_config确保您具有GSSAPIAuthentication yes以启用Kerberos身份validation。

确保krb5.conf在两端都正确设置,这样putty和sshd使用的GSSAPI库就可以find相同的领域并联系相同的KDC(除非您的领域和KCD已经通过DNS进行了正确的宣传,在这种情况下没有什么需要添加到krb5.conf )。

首先,澄清。 Kerberos和SSH密钥是SSH的两个互斥的身份validation方法。 您不使用SSH密钥的Kerberos。 您使用Kerberos 而不是 SSH密钥。 两者都允许“无密码”SSHlogin。 在Kerberos协议阅读的一点可能是为了。

使用Kerberos时,您需要获得一个TGT,certificate在您尝试连接到端点之前,您就是您所说的人。 如果您在Windows上joinActive Directory域,则在login时自动获取Active Directory领域的Kerberos TGT。 但是很多组织并不打扰他们将Linux主机configuration为使用Active Directory Kerberos领域。 如果你这样做,生活就容易多了。 如果不这样做,则意味着Windows需要configuration为了解其他Kerberos领域以及如何申请票证。 这对您的用户来说也是一个额外的步骤,因为他们需要放弃他们的AD TGT并请求您的其他领域的TGT。

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

Kerberos密钥表文件只是Kerberos帐户密码的文件表示。 所以当请求你最初的TGT时,如果你有一个有效的keytab文件,你将不需要input你的密码。 但是这通常也不在SSH客户端的范围之内。

一旦你有一个有效的TGT,你需要确保你的SSH客户端被configuration为使用GSSAPI。 PuTTY支持这个开箱即用,我相信大多数其他人也是如此。

假设一切正确configuration,它应该“只是工作”。 但是在这个过程中会出现很多configuration失误。 也有很多第三方产品可以使事情变得更容易,但是我不会提到任何具体的东西。

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

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

而不是步骤'kinit用户名'执行:

 kinit -kt /path/to/keytab username 

(然后ssh正常。)