RHEL9对接Windows AD Kerberos认证遇kinit无效整数值错误求助
解决Kerberos认证"Invalid integer value"错误的步骤
核心问题定位
你遇到的Invalid integer value错误,最可能的原因是keytab文件的KVNO(密钥版本号)与AD域中服务主体的实际KVNO不匹配,或是上传了错误的keytab文件。从你的输出能看到:
- AD生成keytab时显示KVNO为20
- RHEL上
klist -k查看的KVNO却是18
这说明你上传到RHEL的keytab并非AD新生成的那个(AD输出文件名是evolven.keytab,但RHEL用的是test.keytab)。
具体修复步骤
1. 确认并上传正确的keytab文件
- 在AD域控制器找到新生成的
evolven.keytab文件(不要用旧的test.keytab) - 将该文件上传到RHEL服务器的
/etc/目录,建议重命名为mssql.keytab避免混淆 - 在RHEL上执行以下命令验证KVNO:
确保输出的KVNO与AD生成时的20一致。klist -k /etc/mssql.keytab
2. 重新生成匹配KVNO的keytab(可选,若文件仍不匹配)
如果确认文件正确但KVNO还是不一致,先获取AD用户当前的KVNO:
# 在AD域控制器的PowerShell中执行 Get-ADUser EvolvenDBUser -Properties msDS-KeyVersionNumber | Select-Object msDS-KeyVersionNumber
用得到的数值替换<KVNO>,重新生成keytab:
ktpass -princ MSSQLSvc/MSSQL-G1CFTVE.evolven.corp@EVOLVEN.CORP -mapuser EvolvenDBUser@EVOLVEN.CORP -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass <你的用户密码> -out mssql.keytab -kvno <KVNO>
重新上传这个新文件到RHEL。
3. 验证kinit命令
在RHEL上执行以下命令测试票据获取:
kinit -V -t /etc/mssql.keytab MSSQLSvc/MSSQL-G1CFTVE.evolven.corp@EVOLVEN.CORP
如果成功,会输出类似Authenticated to Kerberos v5的提示。
4. 修复ktutil命令的错误
你之前的ktutil命令使用了错误的KVNO(18),且命令格式有误(不需要带ktutil:提示符)。正确操作如下:
# 进入ktutil交互模式 ktutil # 在交互模式下输入(替换<KVNO>为正确数值,比如20) add_entry -password -p MSSQLSvc/MSSQL-G1CFTVE.evolven.corp@EVOLVEN.CORP -k <KVNO> -e aes256-cts-hmac-sha1-96 -f # 输入用户EvolvenDBUser的密码 # 保存到keytab wkt /etc/mssql.keytab # 退出 quit
5. 检查日志获取详细错误(若仍失败)
你提到日志无输出,可能是日志文件权限问题。先修改权限:
chmod 666 /var/log/krb5libs.log
重新执行kinit后,查看日志文件:
cat /var/log/krb5libs.log
日志会显示更具体的错误原因,比如加密类型不匹配、KVNO错误等。
额外验证项
- 确认AD用户
EvolvenDBUser的账户属性中,已勾选使用Kerberos AES 128位加密和使用Kerberos AES 256位加密 - 确保RHEL上keytab文件的权限为
600,属主为需要使用该keytab的用户(比如root或SQL服务用户):chmod 600 /etc/mssql.keytab chown root:root /etc/mssql.keytab
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

