You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ktutil生成Kerberos Keytab时添加第二个主体失败问题排查

解决Kerberos Keytab双主体生成的非交互式脚本方案

核心思路

利用ktutil的addent -key选项直接传入预提取的密钥,规避交互式输入;通过klist从临时keytab中提取标准格式的密钥类型与值,确保参数与ktutil兼容。

完整脚本示例

#!/bin/bash
# 配置参数
REALM="YOUR_REALM.COM"
PRINCIPAL1="user1/$HOSTNAME@$REALM"
PRINCIPAL2="user2/$HOSTNAME@$REALM"
PASSWORD="your_secure_password"
TEMP_KEYTAB="./temp.keytab"
FINAL_KEYTAB="./final.keytab"

# 1. 生成包含第一个主体的临时Keytab
ktutil <<EOF
addent -password -p $PRINCIPAL1 -k 1 -e aes256-cts-hmac-sha1-96
$PASSWORD
wkt $TEMP_KEYTAB
quit
EOF

# 2. 从临时Keytab提取密钥类型和密钥值
# 注:根据klist输出格式调整awk字段,确保准确提取
KEY_ENTRY=$(klist -e -k -t $TEMP_KEYTAB | grep "$PRINCIPAL1" | head -n1)
ENCTYPE=$(echo "$KEY_ENTRY" | awk '{print $5}')
KEY=$(echo "$KEY_ENTRY" | awk '{print $6}')

# 3. 合并两个主体到最终Keytab
ktutil <<EOF
rkt $TEMP_KEYTAB
# 使用-key选项直接传入密钥,无需交互式输入
addent -key -p $PRINCIPAL2 -k 1 -e $ENCTYPE
$KEY
wkt $FINAL_KEYTAB
quit
EOF

# 清理临时文件
rm -f $TEMP_KEYTAB

# 验证最终Keytab
echo "验证最终Keytab内容:"
klist -e -k -t $FINAL_KEYTAB

关键说明

  • addent -key是核心:该选项允许直接传递密钥字符串,替代交互式密码输入,完美适配非交互式脚本场景。
  • 密钥提取准确性:klist -e -k -t会输出密钥的加密类型(如aes256-cts-hmac-sha1-96)和十六进制密钥值,必须确保这两个参数与addent命令的-e选项及输入的密钥完全匹配。
  • 加密类型适配:如果默认的aes256不适用,可替换为环境支持的其他类型(如aes128-cts-hmac-sha1-96、des3-cbc-sha1等),需与KDC配置一致。

内容的提问来源于stack exchange,提问作者Pavan Sai Aravala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:58:15