linux - 当缓存仍有凭据时避免 kinit
问题描述
我有一个systemd
服务,它调用一个 web 服务来定期(每分钟)执行一些维护。该服务如下所示:
[Service]
Type=oneshot
ExecStart=/usr/bin/kinit -kt user.keytab user@DOMAIN
ExecStart=/usr/bin/curl --tlsv1.2 --cacert cert.pem --negotiate --user user: --url https://website/maintenance
现在这每次都会破坏并重新初始化我的kerberos票。kinit 最多可能需要 2-3 分钟。
我想避免这一步,只有kinit
在需要时。有任何想法吗?
解决方案
尝试 HTTP 请求,并使用状态码来决定是否需要尝试 kinit。你可以像这样 grep curl 的输出:
curl -s -i http://www.example.com | grep "HTTP/" | tail -1
如果是“HTTP/1.1 401 Unauthorized”,请运行 kinit 并重试。(如果您愿意,请参阅此处了解如何仅解析响应的数字部分)
“tail -1”部分是为了确保你只得到最后一个代码;由于协商协议,您通常会从 grep 命令获得多行,如下所示:
HTTP/1.1 401 Unauthorized
HTTP/1.1 200 OK
第一个是来自服务器的初始挑战;第二个是最终响应代码。
推荐阅读
- react-native - 关于 react-native 中的图表
- r - 给定一个有限的调色板,如何从热到冷排序,即发散
- xpages - ViewScope 变量变为空,keepsessionalive 不起作用?
- c# - 在 Outlook 365 中创建电子邮件草稿,然后将其打开以进行编辑
- c# - 可以找到错误 CS1061 “...不包含定义和扩展方法...接受类型的第一个参数”
- reactjs - 反应原生重新加载不起作用
- html - 在 google sheet modalDialog 中按下按钮为单元格赋值
- c# - DbUpdateException“无法保存更改”
- talend - Talend - 执行作业的命令行
- google-sheets - 谷歌表提取 URL 参数字符串