我希望能够使用我第一次login时生成的kerberos票证从一个FreeBSD主机ssh到一个FreeBSD主机。
FreeBSD 10.3与工作openldap-sasl-client,kerberos 5(不是heimdal),sssd,ssh,并joinActive Directory(2008 R2)。 我不得不从/ usr / ports源码位置编译sssd,因为默认情况下sssd-ad并不包括我所需要的。 我不使用winbind,所以参考1是没有帮助的。 (FreeBSD也没有authconfig命令,显然。)我可以执行一个kinit就好了:
[bgstack15@localhost /]$ kinit [email protected]'s Password: [bgstack15@localhost /]$ klist Credentials cache: FILE:/tmp/krb5cc_5532829429 Principal: [email protected] Issued Expires Principal Aug 18 16:01:16 2016 Aug 19 02:01:16 2016 krbtgt/[email protected]
之后,我可以ssh -K secondhost ,它需要我在那里。
问题是我希望能够在login时生成一个Kerberos票据,或者至less这样我就不必input我的密码了。 我使用GSSAPI身份validation来到本地主机,所以我买了一张kerberos票。 我可以通过一个,也许?
这是我的/etc/pam.d/sshd
auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient pam_unix.so no_warn auth sufficient pam_krb5.so no_warn use_first_pass forwardable ccache=krb5cc_%u auth required pam_unix.so no_warn try_first_pass account required pam_nologin.so account required pam_login_access.so account sufficient /usr/local/lib/pam_sss.so ignore_unknown_user account required pam_unix.so session optional /usr/local/lib/pam_sss.so session required /usr/local/lib/pam_mkhomedir.so mode=0700 session required pam_permit.so password sufficient /usr/local/lib/pam_sss.so use_authtok password sufficient pam_krb5.so use_authtok forwardable password required pam_unix.so no_warn try_first_pass
我也试过了
auth sufficient pam_krb5.so no_warn try_first_pass forwardable ccache=krb5cc_%u
有一个选项可以在.profile中运行kinit ,但是我试图避免input密码。
是使用pam_exec.so一个选项? 我可以做echo PASSWORD | kinit --password-file=STDIN echo PASSWORD | kinit --password-file=STDIN哪个能起作用,所以我可以用这个方法调用它?
看来你的SSH客户端(PuTTY)不是委托凭据。 没有任何数量的pam技巧可以解决这个问题,而不会导致你重新input你的密码,这相当于打败了这个问题。
我似乎无法使腻子0.67代表,即使有可能的选项检查。 您所指的接受行看起来像是从身份validation的sshdlogging,而不是委派。 默认情况下,sshd不会logging委派。 看SSH的数据包日志,腻子0.67它甚至没有做出尝试。
编辑:
假设使用密码login并不能帮助你(在注释中),你也可能需要调整你的/etc/krb5.conf设置。 在开始对GSSAPIlogin进行故障排除之前,您需要使用交互式login进行操作。
[libdefaults] default_realm = EXAMPLE.COM # The following krb5.conf variables are only for MIT Kerberos. krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true
原来的答案如下。
问题是我希望能够在login时生成一个Kerberos票据,或者至less这样我就不必input我的密码了。 我使用GSSAPI身份validation来到本地主机,所以我买了一张kerberos票。 我可以通过一个,也许?
其实,我怀疑这是你的问题。 当您使用GSSAPI(或任何其他forms的基于密钥的身份validation)对sshd进行身份validation时,您完全绕过了auth堆栈。 这可以防止PAM模块提示您提供任何forms的交互式凭证,但是也可以防止模块在该堆栈中实施的任何“便利function”被触发。 一个快速的testing将是用您的密码login并运行klist ,我强烈怀疑这会向您显示您期待的结果。
我最有经验的pam_krb5实现是由eyrie.org(Russ Allbery)托pipe的,所以我将使用它作为与您链接的文档的比较点。 你可以在这里find我引用的联机帮助页。
两个模块都在auth堆栈中实现pam_setcred() :
Kerberos 5身份validation组件提供validation用户身份(pam_sm_authenticate())和设置用户特定凭据(pam_sm_setcred())的函数。
提供pam_authenticate()和pam_setcred()的实现。 前者从PAM会话中获取用户名,提示input用户的密码(除非configuration为使用已经input的密码),然后执行Kerberos初始authentication,将获得的凭证(如果成功)存储在临时票证caching中。 后者根据调用的标志取得临时票据caching的内容,并将其写入用户拥有的持久票据caching中,或使用临时票据caching刷新现有用户票据caching。
这两个模块都不在account堆栈中实现pam_setcred() :
Kerberos 5帐户pipe理组件提供执行帐户pipe理的functionpam_sm_acct_mgmt()。 该函数通过调用krb5_kuserok()(它检查用户的.k5login文件)validation是否允许经过身份validation的委托人login到本地用户帐户。
提供pam_acct_mgmt()的实现。 它所做的只是执行与上述pam_authenticate()实现相同的授权检查。
Russ Allbery模块在session堆栈中实现pam_setcred() 。 当被session堆栈调用时,FreeBSD模块不做任何事情 。
Kerberos 5会话pipe理组件提供了启动(pam_sm_open_session())和终止(pam_sm_close_session())会话的函数。 由于会话pipe理没有在Kerberos 5中定义,所以这两个函数都会返回成功。 提供它们只是因为PAM模块的命名约定。
提供pam_open_session()的实现,相当于使用PAM_ESTABLISH_CRED标志和pam_close_session()调用pam_setcred(),pam_close_session()销毁由pam_setcred()创build的票据caching。
简而言之,您需要一个PAM模块,它将在account或session堆栈中提供所需的function。 当您通过GSSAPI进行身份validation时,您目前看起来不会满足这种需求。