描述如何连接到kerberos安全端点的文档显示以下内容:
curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..."
Run Code Online (Sandbox Code Playgroud)
-u必须提供该标志,但curl会忽略该标志.
该--negotiate选项是否导致curl查找事先使用该kinit命令创建的keytab ,或者是否会卷曲提示输入凭据?
如果它查找keytab文件,该命令将查找哪个文件名?
我试图理解Kerberos是如何工作的,因此遇到了一个名为Keytab的文件,我相信它用于对KDC服务器进行身份验证.
就像kerberos领域中的每个用户和服务(比如说Hadoop)都有服务主体一样,每个用户和服务都有一个keytab文件吗?
此外,使用keytab进行身份验证是否适用于对称密钥加密或公钥 - 私钥?
我想创建一个脚本,使用ktutil生成一个keytab.运行脚本时,我想使用[user] $ script.sh PASSWORD
#script.sh
echo "addent -password -p PRINCIPAL -k 1 -e aes256-cts-hmac-sha1-96" | ktutil
Run Code Online (Sandbox Code Playgroud)
Ktutil比需要密码,这里我想使用上面的PASSWORD参数.我如何通过密码辩论?
希望更多地了解kinit和keytab文件的使用.例如,如果我已经为服务生成了一个keytab文件(通过ktpass -mapuserto 注册到活动目录的服务someuseraccount)
ktab -k "mykeytab" -a <someprincipal>
Run Code Online (Sandbox Code Playgroud)
当用户调用USERA登录到Windows并使用此密钥表作为kinit的输入参数时,真正发生了什么?
kinit -k -t "mykeytab" <someprincipal>
Run Code Online (Sandbox Code Playgroud)
是否 为当前登录kinit生成初始凭据?someprincipalUSERA
希望你能清除我的这种困惑.谢谢
我有一个keytab,计划每天运行(只需一次)来更新它的票.但是,我想知道keytab本身是否有任何生命周期?我认为它没有,因为cron作业已被配置为每天执行,我认为将创建一个新的票而不是更新?
是否可以通过直线连接到Hive使用(kerberos)keytab文件,类似于JDBC中使用的方法
PS:beeline确实支持使用用户名和密码连接kerberos安全的蜂巢服务器.但我正在寻找一种方法来连接它与keytab文件. http://doc.mapr.com/display/MapR40x/Configuring+Hive+on+a+Secure+Cluster#ConfiguringHiveonaSecureCluster-UsingBeelinewithKerberos
首先,使用setspn命令为用户注册服务主体名称。
setspn -a CS/dummy@abc.com虚拟用户
setspn -l虚拟用户
给出输出为
CS/dummy@abc.com
接下来,当使用/ mapUser选项执行ktpass命令时,将修改用户帐户的服务主体名称,以便删除域组件。
ktpass / pass Password @ 123 -out dummy.1.keytab -princ CS/dummy@abc.com -crypto DES-CBC-MD5 + DumpSalt -ptype KRB5_NT_PRINCIPAL + desOnly / mapOp set / mapUser dummyuser
setspn -l虚拟用户
给出输出为
CS /虚拟
以下两个命令是否正确并且以相同的方式工作?
setspn -a CS /虚拟虚拟用户
setspn -a CS/dummy@abc.com虚拟用户
在SPN中指定服务名称时,是否也必须包含域组件?你能澄清一下吗?
这是我遇到的事情,我找到了解决方案。由于没有任何问题,我将其作为问题发布,并将我的解决方案作为答案。
环境:
问题:
我通过“ktutil”创建了“user.keytab”文件来更新没有密码的 krb 票证,正如这里推荐的那样https://kb.iu.edu/d/aumh
ktutil: addent -password -p user@DOMAIN.LOCAL -k 1 -e rc4-hmac
Password for user@DOMAIN.LOCAL: [enter your password]
ktutil: addent -password -p user@DOMAIN.LOCAL -k 1 -e aes256-cts
Password for user@DOMAIN.LOCAL: [enter your password]
ktutil: wkt user.keytab
ktutil: quit
Run Code Online (Sandbox Code Playgroud)
然后测试以异常告终
(user@server [~])$ kinit user@DOMAIN.LOCAL -k -t user.keytab
kinit: Preauthentication failed while getting initial credentials
Run Code Online (Sandbox Code Playgroud) 我有一些关于使用keytab进行身份验证的问题,希望这里的人能够帮助我
比如,我有userA谁将使用在端口1010上运行的服务.首先,userA将登录到Active Directory以验证自己.

登录后,userA将尝试连接到服务器以使用其服务1010.为了使服务器验证UserA是谁,我需要使用setspn在Active Directory中注册SPN.例如
setspn -s service1010/mydomain.com serviceaccount1
Run Code Online (Sandbox Code Playgroud)
然后需要在Active目录下生成ktab文件,例如
ktab -a serviceprincal1010/server.domain.com@DOMAIN.COM -k mykeytab.keytab
Run Code Online (Sandbox Code Playgroud)
然后带到mykeytab.keytab服务器.
在服务器上,我会使用带有登录配置的JAAS来查询KDC,例如
ServicePrincipalLoginContext
{
com.sun.security.auth.module.Krb5LoginModule required
principal=serviceprincal1010/server.domain.com@DOMAIN.COM
doNotPrompt=true useKeyTab=true keyTab=mykeytab.keytab storeKey=true;
};
Run Code Online (Sandbox Code Playgroud)
从这一刻起,我很困惑.userA如何得到验证(即,userA实际上是谁?).
我构建了一个Java应用程序,该应用程序通过ssh运行命令。在第一次尝试中,我通过用户名和密码进行了身份验证,并且一切正常。
现在,我想使用Kerberos keytab文件进行身份验证,但这会带来问题!
这里是我的配置几句话:
my-server.deMYREALM.DEkeytabuserCentOS 7Windows 8.1 (x64)了所有默认配置Kerberos for WindowsDanielkinit -kt ... 似乎工作正常,因此keytab文件也应该没问题到目前为止,我的代码片段是:
public static void main(String[] args) {
String host = "my-server.de";
String user = "keytabuser";
String command = "ls -l";
JSch jsch = new JSch();
jsch.setLogger(new MyLogger());
System.setProperty("java.security.krb5.conf", "C:\\ProgramData\\MIT\\Kerberos5\\krb5.ini");
System.setProperty("java.security.auth.login.config", "C:\\ProgramData\\MIT\\Kerberos5\\jaas.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
//to enable kerberos debugging mode
System.setProperty("sun.security.krb5.debug", "true");
try {
Session session = jsch.getSession(user, host, 22);
Properties config = new …Run Code Online (Sandbox Code Playgroud)