【发布时间】: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