Kerberos如何与SSH配合使用?


22

假设我有四台计算机,笔记本电脑,Server1,Server2,Kerberos服务器:

  • 我使用PuTTY或SSH从L登录到S1,输入用户名/密码
  • 然后从S1 SSH到S2。Kerberos验证我身份时不需要密码

描述所有重要的SSH和KRB5协议交换:“ L向S1发送用户名”,“ K向S1发送用户名”等。

(此问题旨在进行社区编辑;请非专业读者加以改进。)

Answers:


27

首次登录:

  • L向S1发送用户名和SSH身份验证请求
  • S1返回可用的SSH身份验证机制,其中“密码”为其中之一
  • L选择“密码”并将纯密码发送给S1
  • S1将用户名和密码提供给PAM堆栈。
  • 在S1上,PAM(通常是pam_krb5pam_sss)从Kerberos KDC请求TGT(授予票据的票据)。
    1. S1获得TGT。
      • 旧样式(不使用预认证):S1发送一个AS-REQ并接收一个包含TGT的AS-REP。
      • 新样式(具有预身份验证):S1使用您的密码来加密当前时间戳,并将其附加到AS-REQ。服务器解密时间戳并验证其是否在允许的时间偏差内;如果解密失败,密码将立即被拒绝。否则,在AS-REP中返回TGT。
    2. S1尝试使用从您的密码生成的密钥来解密TGT。如果解密成功,则密码被接受为正确的密码。
    3. TGT存储到新创建的凭证缓存中。(您可以检查$KRB5CCNAME环境变量以查找ccache,或用于klist列出其内容。)
  • S1使用PAM执行授权检查(取决于配置)并打开会话。
    • 如果pam_krb5在授权阶段被调用,则检查是否~/.k5login存在。如果是这样,则必须列出客户端Kerberos主体。否则,唯一允许的主体是。username@DEFAULT-REALM

第二次登录:

  • S1向S2发送用户名和SSH身份验证请求
  • S2返回可用的身份验证机制,其中之一是“ gssapi-with-mic” 1
  • S1 通过向KDC发送带有TGT的TGS-REQ并从中接收带有服务票证的TGS-REP来请求的票证。host/s2.example.com@EXAMPLE.COM
  • S1生成“ AP-REQ”(身份验证请求)并将其发送到S2。
  • S2尝试解密该请求。如果成功,则完成身份验证。(PAM不用于认证。)
    • 其他协议(例如LDAP)可能会选择使用请求中包含的“会话密钥”对进一步的数据传输进行加密;但是,SSH已经协商了自己的加密层。
  • 如果身份验证成功,则S2与S1一样使用PAM进行授权检查并打开会话。
  • 如果启用了凭据转发,并且TGT具有“ forwardable”标志,则S1请求用户的TGT副本(已设置“ forwarded”标志)并将其发送到S2,然后将其存储到新的ccache中。这允许递归的Kerberos身份验证登录。

请注意,您也可以在本地获取TGT。在Linux上,您可以使用进行操作kinit,然后使用进行连接ssh -K。对于Windows,如果您已登录Windows AD域,则Windows会为您完成;否则,可以使用MIT Kerberos。PuTTY 0.61支持同时使用Windows(SSPI)和MIT(GSSAPI),尽管您必须手动启用转发(代理)。


gssapi-keyex也可以使用1,但未被正式的OpenSSH接受。


您能否详细说明密码,TGT和KDC的响应之间的关系?PAM 如何确定密码是否正确尚不清楚。
Phil

注意:这句话是不正确的:“ S1发送TGS-REQ并接收包含TGT的TGS-REP。” 不正确,因为TGT是AS_REP的一部分。TGS_REPn将带回服务票
2014年

1
最新版本的OpenSSH具有密钥交换功能。我认为4.2p1是第一个具有修补程序的版本。(sxw.org.uk/computing/patches/openssh.html
quinnr

不,他们没有。这些是第三方补丁。我的意思是“不接受正式的OpenSSH”
grawity

0

长话短说:理想情况下,应该在终端(L)上使用kinit命令或作为本地登录序列的一部分,在所谓的“单点登录”设置中获取Kerberos票证。这样就可以在没有密码提示的情况下访问远程系统(S1,S2)。通过采用称为“票务转发”的技术,可以进行链接访问(L→S1→S2)。这种设置尤其需要从终端(L)直接访问KDC。

grawity的另一个答案详细解释了这种方法。


-2

这里唯一不明显的步骤是,S1上有一个PAM模块,该模块使用您的凭据执行A,kinit并从K(客户端身份验证)获得票证授予票证。然后,当您使用Kerberos身份验证SSH到S2时,将进行客户端服务身份验证。我看不到逐个消息地进行所有乏味的交流所带来的好处。

-vvv如果要查看每条消息并阅读Kerberos 的Wikipedia描述,请在ssh命令上添加a 。


2
用“我看不到详细说明的好处” 回答一个要求提供详细信息的问题对我来说是很粗鲁的。
马西莫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.