launchd bash kinit 未检索 kerberos 票证

launchd bash kinit not retrieving kerberos tickets

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

感谢任何帮助

#!/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's password:
obtained kerberos token


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

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

注意:正如 Samson 在他的评论中提到的那样,将密码放在脚本文件中是一个糟糕的解决方案。我仅将其用于测试。 使用密钥选项卡是在 kerberos 中执行此操作的正确方法。

为 expect 命令添加超时对我有用

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

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

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