launchd bash kinit没有检索kerberos门票

时间:2016-02-20 14:18:02

标签: macos bash kerberos launchd

我正在尝试自动更新我的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中执行此操作的正确方法。

2 个答案:

答案 0 :(得分:2)

为expect命令添加超时

答案 1 :(得分:2)

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

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

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