自动续订 Kerberos 票证

Auto renew the Kerberos ticket

我不得不第一次使用 Kerberos 身份验证,它有点管用,但我觉得缺少对正在发生的事情以及如何正确处理它的理解。

基本上,我需要的是我的 Python 脚本每隔几个小时 运行 并在 MS AD 环境中使用域帐户向远程 Web 服务器发送请求。

以下代码为我提供了准备就绪的会话实例:

from requests import Session
import gssapi
from requests_gssapi import HTTPSPNEGOAuth

session = Session()
session.auth = HTTPSPNEGOAuth(mech=gssapi.mechs.Mechanism.from_sasl_name("SPNEGO"))

该脚本被添加到 linux 框中用户的 crontab,并且 kinit 用于获取票证授予票证:

kinit -kt ~/ad_user.keytab ad_user@DOMAIN.COM

但过了一会儿,由于票过期,一切都停止了。解决方案很简单:每 8 小时将 kinit 添加到 crontab 到 运行 即可解决问题。

我想知道是否有更好更合适的方法来实现同样的目标?如果我不 want/need 在 AD 中为服务器创建主体,而只是希望一些代码始终具有有效票证 - 我可以避免在用户的 crontab 中有专门的任务吗?

为什么不直接在代码中启动票证缓存?这可能有助于使您的工作更加透明,因为您的工作依赖于 kerberos 登录及其所在的位置。 (5 年后,当你再次看到这段代码时,它会很难记住,这可能会让你以后免去一些悲伤。)

这也有助于确保其他人不会通过删除 cron 作业而意外禁用您的作业。

kinit from python script using keytab

我会在每个需要身份验证的脚本中执行此操作以减少外部依赖性。