使用 SSH 别名时,为什么 SSH 会忽略我的(有效)Kerberos 票证?

Ale*_*lls 5 ssh alias kerberos

我使用 Kerberos 票证身份验证通过 ssh 成功连接到我大学的网络。正常、详细的操作(kinit 票证,然后 ssh user@hostname)工作正常。

问题

~/.ssh/config但是,在文件中设置 ssh 别名时,ssh 完全忽略 Kerberos 并提示我输入密码。(请参阅下面的调试输出。)

为什么是这样?我如何配置它以使用 Kerberos?

注意:在尝试使用 ssh 别名之前和之后,使用 Kerberos 的正常 ssh 操作继续工作。此外,当提供登录密码时,ssh 别名可以按预期工作。

(系统: Mac OS 10.11.4, Darwin Kernel Version 15.4.0, OpenSSH_6.9p1, LibreSSL 2.1.8, Kerberos 5 release 1.7)

调试输出

从 CL 运行 SSH 时,我添加-vvv了详细的调试信息,然后对输出进行了比较。我已经包括了显着不同的部分。

$ ssh -vvv [ssh-alias]

debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup password
debug3: remaining preferred: ,keyboard-interactive,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
atmills@login.engin.umich.edu's password:
debug2: we sent a password packet, wait for reply
debug1: Authentication succeeded (password).
Authenticated to login.engin.umich.edu ([141.213.74.56]:22).
Run Code Online (Sandbox Code Playgroud)
$ ssh -vvv [user@host]

debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup gssapi-keyex
debug3: remaining preferred: gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-keyex
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug2: we did not send a packet, disable method
debug3: authmethod_lookup gssapi-with-mic
debug3: remaining preferred: publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic
debug3: Trying to reverse map address 141.213.74.58.
debug2: we sent a gssapi-with-mic packet, wait for reply
debug1: Delegating credentials
debug1: Delegating credentials
debug1: Authentication succeeded (gssapi-with-mic).
Authenticated to login.engin.umich.edu ([141.213.74.58]:22).
Run Code Online (Sandbox Code Playgroud)

thr*_*rig 1

正如我所看到的,Kerberos 配置处理完全限定的主机名 ( gato.example.org) 而不是不合格的主机 ( gato);使用不合格的主机名在测试ssh调试行时会产生以下结果:

debug1: Next authentication method: gssapi-with-mic
debug1:  Miscellaneous failure (see text)
Error from KDC: LOOKING_UP_SERVER while looking up 'host/gato@EXAMPLE.ORG' (cached result, timeout in 1089 sec)
Run Code Online (Sandbox Code Playgroud)

这是因为 kerberos 主机的/etc/krb5.keytab文件中通常仅具有完全限定的主机主体条目:

[root@gato ~]# strings /etc/krb5.keytab | head -3
EXAMPLE.ORG
host
gato.example.org
Run Code Online (Sandbox Code Playgroud)

您的日志似乎都使用完全限定的login.engin.umich.edu主机名,因此您的问题可能是其他问题,但一般来说,在处理 kerberos 时,最好手动强制使用完全限定的主机名~/.ssh/config

Host gato.example.org gato bubba
    Hostname gato.example.org
Run Code Online (Sandbox Code Playgroud)

或者通过CanonicalizeHostname关键字(请参阅ssh_config(5)详细信息和注意事项)。

另一点需要注意的是,这login.engin.umich.edu是一个主机池;要测试的一件事是该池中的特定节点对于 kerberos 配置错误,从而将您转回密码身份验证,尽管这需要编辑/etc/hosts以包含类似以下内容:

141.213.74.56 login.engin.umich.edu
Run Code Online (Sandbox Code Playgroud)

并记住完成后删除测试条目。(使用IP地址对kerberos没有好处,您需要使用主机名,因此需要进行/etc/hosts测试。)