我第一次不得不使用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
但过了一段时间,由于车票过期,一切都停止了。解决方案很简单:将kinit
添加到crontab中,每8小时运行一次就解决了这个问题。
我想知道是否有更好、更合适的方法来实现同样的目标?如果我不想/需要在AD中为服务器创建主体,而只是希望某些代码始终具有有效票证,那么我可以避免在用户的crontab中有专用任务吗?
为什么不直接在代码中启动票证缓存?这可能有助于提高作业依赖kerberos登录及其位置的透明度。(5年后,当你回到这个代码时,它将很难记住,这可能会为你以后节省一些悲伤。(
它还将有助于确保某人不会通过删除cron作业意外禁用您的作业。
使用keytab 从python脚本中获取kinit
我会在每个需要身份验证以减少外部依赖性的脚本中都这样做。