我正在尝试自动更新我的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中执行此操作的正确方法。
答案 0 :(得分:2)
为expect命令添加超时
答案 1 :(得分:2)
将硬编码的明文密码填入命令提示符是邪恶要做的事情。为什么首先使用Kerberos身份验证?
在后台创建Kerberos TGT的预期方法是使用 keytab (即包含密码的加密“哈希”的文件)。
krb5.conf
是否有预期/支持的加密列表(例如aes256-cts-hmac-sha1-96
,rc4-hmac
)ktutil
实用程序创建keytab(首先阅读教程,
命令远非直观) kinit -kt /some/path/to/mykt.keytab