![无需用户干预即可更新 Kerberos 票证](https://linux22.com/image/528026/%E6%97%A0%E9%9C%80%E7%94%A8%E6%88%B7%E5%B9%B2%E9%A2%84%E5%8D%B3%E5%8F%AF%E6%9B%B4%E6%96%B0%20Kerberos%20%E7%A5%A8%E8%AF%81.png)
我们找到了最优秀的程序,它可以让我们的 OSX 机器通过 Windows 打印服务器进行打印。(ksmbprint 来自http://deploystudio.com/)
该程序允许通过 kerberos 身份验证在服务器上进行 smb 打印 - 无需为每个打印作业不断输入 AD 用户名和密码,也不必在使用 lpadmin 进行打印的 300 台左右的机器上设置特定的打印机。
问题是 kerberos 票证的有效期为 10 小时。10 小时 1 秒,打印作业进入以太网 - 看起来像是通过了,但却无处可去。
在测试中,我可以进入 Keychain Access -> Ticket Viewer,然后输入我的 AD 密码后更新票证。这对测试人员来说没问题,但对用户来说则不然。
我发现了一个脚本,它会检查用户的票证剩余时间少于 30 分钟时,它会要求他们重新进行身份验证。将其设置为启动代理,它就可以正常工作 - 直到要求用户重新进行身份验证。作为代理运行时不会发生此部分。
寻找一种尽可能减少用户干预的方法来重新授权票证。如果我能让启动代理像刚运行时一样工作,那么对于第一次运行,我没问题,但我真的很想找到一种悄悄地重新验证 Kerberos 票证的方法。
与域管理员进行了交谈,他们不建议延长票证时间,经过讨论后,我们意识到无论我们将其设置为何时到期,都会有人的票证将要过期,所以我们最好找到更好的解决方案。
编辑:我已经让启动代理工作了,但仍在寻找一种无需用户干预的方法。当这个随机框出现时,要求用户信任我们并输入他们的域密码的想法是我们不应该要求用户做的事情之一。
答案1
kinit -R
对我来说似乎很管用。我很想建议只使用一个 LaunchAgent 来运行此命令,StartInterval 为 7200 秒(2 小时);您可以做得更花哨(例如,首先测试网络连接,在 TGT 接近到期时调整重试频率等),但我认为您主要会做很多工作以避免一点点计算开销。
答案2
重新讨论旧话题,因为这在今天仍然有意义。使用 LaunchAgent 触发“kinit -R”似乎是完成此任务的最佳非第三方方式。
应用商店中充满了可以自动更新 Kerberos 票证的应用程序,因此如果您对 LaunchAgent plist 不满意,可以去那里看看。
如果您需要可运行的示例,以下是我的一个示例。出于测试目的,我每小时都会运行一次。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.kerberos.ticketrenew</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>kinit -R</string>
</array>
<key>StartInterval</key>
<integer>18000</integer>
<key>StandardErrorPath</key>
<string>/tmp/com.kerberos.ticketrenew.err</string>
<key>StandardOutPath</key>
<string>/tmp/com.kerberos.ticketrenew.out</string>
</dict>
</plist>
此外,根据您的修改,“kinit -R”不应提示用户输入凭证,如果正确应用,对我来说也不会提示。根据 Kerberos 标准,Kerberos 票证续订不需要重新提供凭证。只有当票证过期并需要重新生成时,才会提示用户输入凭证。