假设我有四台电脑,Laptop,Server1,Server2,Kerberos服务器:
描述所有重要的SSH和KRB5协议交换:“L发送用户名到S1”,“K发送…到S1”等
(这个问题打算由社区编辑,请为非专业读者改进 。)
首次login:
pam_krb5
或pam_sss
)从Kerberos KDC请求一个TGT(ticket- pam_sss
ticket)。
$KRB5CCNAME
环境variables以查找ccache,或使用klist
列出其内容。) pam_krb5
,它将检查是否存在~/.k5login
。 如果有,它必须列出客户端Kerberos主体。 否则,唯一允许的主体是username @ DEFAULT-REALM
。 第二次login:
host/ s2.example.com @ EXAMPLE.COM
请求一张票,通过TGT向host/ s2.example.com @ EXAMPLE.COM
发送一个TGS-REQ,并从host/ s2.example.com @ EXAMPLE.COM
接收一个带有服务票据的TGS-REP。 请注意,您也可以在本地获得TGT。 在Linux上,你可以使用kinit
,然后用ssh -K
连接。 对于Windows,如果您login到Windows AD域,则Windows会为您执行此操作; 否则,可以使用MIT Kerberos 。 PuTTY 0.61支持同时使用Windows(SSPI)和MIT(GSSAPI),但您必须手动启用转发(委派)。
1 gssapi-keyex
也是可能的,但是没有被官方的OpenSSH接受。
简而言之:理想情况下,应该在terminal(L)上使用kinit
命令获取Kerberos票据,或者在所谓的“单一login”设置中将Kerberos票据作为本地login序列的一部分。 远程系统(S1,S2)可以在没有密码提示的情况下访问。 链式访问(L→S1→S2)可以通过使用称为“票据转发”的技术来实现。 这种设置尤其需要从terminal(L)直接访问KDC。
另一个由grawity的答案详细解释了这种方法。
这里唯一不明显的步骤是在S1上有一个PAM模块,它使用您的凭证来执行kinit
并从K(客户端身份validation)获取您授予票证的票据。 然后,当您使用Kerberos身份validationSSH到S2时,将进行客户端服务身份validation。 我没有看到通过消息去经历所有乏味的交stream信息的好处。
如果您想查看每条消息并阅读Kerberos的维基百科描述 ,请在您的ssh命令中input-vvv
。