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

使用脚本生成keytab后kinit预认证失败问题求助

解决Kerberos Keytab预认证失败问题

你遇到的Preauthentication failed错误大概率是密钥版本号(kvno)不匹配导致的——你的脚本硬编码了-k 1,但实际AD中用户的kvno在密码修改后会自动递增,用旧的kvno生成的keytab自然无法通过预认证。

下面是具体的修复步骤:

1. 确认当前用户的正确kvno

先执行命令获取用户当前的密钥版本号:

kvno username@SNAPP.NET

输出类似username@SNAPP.NET: kvno = 3,这里的3就是你需要用的kvno。

2. 修改脚本,使用正确的kvno并优化加密算法

把脚本里的硬编码kvno替换为实际值,同时移除可能被AD禁用的过期算法(比如arcfour-hmac-md5-exp),优先使用现代加密算法:

#!/bin/bash

user="username"
pass="password"
realm="SNAPP.NET"

# 获取当前有效的kvno
kvno=$(kvno "$user@$realm" | awk '{print $2}')

printf "%b" "add_entry -password -p $user@$realm -k $kvno -e aes256-cts-hmac-sha1-96
$pass
add_entry -password -p $user@$realm -k $kvno -e aes128-cts-hmac-sha1-96
$pass
add_entry -password -p $user@$realm -k $kvno -e arcfour-hmac-md5
$pass
write_kt $user.keytab" | ktutil

注意:如果密码包含$、!等特殊字符,要用单引号包裹pass变量,比如pass='MyP@ssw0rd!',避免Bash解析特殊字符导致密码错误。

3. 验证生成的keytab

生成keytab后,用以下命令检查条目是否正确:

klist -kte username.keytab

确保输出中的kvno和你之前获取的一致,且包含AD支持的加密算法。

4. 测试kinit认证

最后用keytab测试认证:

kinit -kt username.keytab username@SNAPP.NET

如果没有报错,说明keytab正常可用。

另外,还要检查两点:

  • 生成keytab的机器与AD服务器的时间差不能超过5分钟(Kerberos对时间同步要求严格);
  • 确保AD用户账户的"预认证"选项是开启状态(默认开启,若关闭也会导致预认证失败,但你手动kinit能成功的话大概率是开启的)。

内容的提问来源于stack exchange,提问作者Nestor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:35:15