【问题标题】:launchd bash kinit not retrieving kerberos tickets启动 bash kinit 未检索 kerberos 票证
【发布时间】:2016-02-20 14:18:02
【问题描述】:

我正在尝试自动更新我的 kerberos 票证。下面的脚本在终端中完美运行,但在 Automator 或 Launchd 中失败。 尽管 expect 命令返回没有错误,但没有获得新的票证。 运行 klist 将返回一个空列表

任何帮助表示赞赏

#!/bin/sh
expect -c 'spawn /usr/bin/kinit USER@DOMAIN; expect "password:" { send "<password>" ; interact} '
if [ "$?" = "0" ]; then
echo "obtained kerberos token"
else
echo "couldn't obtain kerberos token"
exit 1;
fi
exit 0

在launchd中运行会记录以下输出

USER@DOMAIN 的密码:
获得kerberos令牌


通过在发送命令后添加一些超时来解决

expect -c 'spawn /usr/bin/kinit USER@DOMAIN; expect "password:" { send "<password>" ; interact}; sleep 5 '

注意:正如 Samson 在他的评论中提到的,在脚本文件中包含密码是一个糟糕的解决方案。我只用它来测试。 在 kerberos 中使用 key tab 是正确的方法。

【问题讨论】:

  • 您的脚本在由 launchd 运行时是否显示输出?如果是这样,它是否说它获得了令牌而不是?请澄清您的问题。
  • 我在上面添加了输出。看起来脚本运行,输入密码并成功返回。但是没有获得令牌。
  • 您能否在令牌成功完成后添加对令牌的检查并将其添加到输出中以查看它是否实际上正在获取令牌,但是事后发生了一些事情?
  • 我已经添加了 klist 命令。日志显示它返回空 - 因此在脚本运行期间没有获得令牌。
  • launchd 是否以与您正常执行时不同的用户身份运行?

标签: macos bash kerberos launchd


【解决方案1】:

为期望命令添加超时对我有用

【讨论】:

    【解决方案2】:

    将硬编码的明文密码填充到命令提示符是一件邪恶的事情。为什么首先使用 Kerberos 身份验证?

    在后台创建 Kerberos TGT 的预期方法是使用 keytab(即包含密码的加密“哈希”的文件)。

    1. 检查您的krb5.conf 以获取预期/支持的加密列表(例如aes256-cts-hmac-sha1-96、rc4-hmac)
    2. 使用ktutil 实用程序创建密钥表(首先阅读教程, 命令远非直观)
    3. 用kinit -kt /some/path/to/mykt.keytab测试
    4. 限制 keytab 文件的权限,因为它允许任何人 使用您的帐户登录

    【讨论】:

    • 当然。应该提到我的问题仅用于测试。在两者之间切换到键选项卡。可能马上就更容易了,但仍然希望让 expect 命令正常运行。
    猜你喜欢
    • 2018-04-02
    • 2021-12-12
    • 2021-10-20
    • 1970-01-01
    • 2012-01-06
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多