运行 Java 应用程序时如何修复 Kerberos 身份验证提示
How to fix Keberos Authentication prompt while running Java application
我写了一个 Java 应用程序来连接 hive-metastore。它工作正常但是当我 运行 Linux 上的 jar 文件时它要求输入 Kerberos 用户名和密码
.我已经在我的代码中指定了 Kerberos 主体和密钥表文件。而且我不想使用额外的 jass.config 文件。有什么办法可以解决这个问题吗?
这是我的源代码
HiveConf conf = new HiveConf();
MetastoreConf.setVar(conf, ConfVars.THRIFT_URIS, "thrift://HOSTNAME:9083");
MetastoreConf.setBoolVar(conf, ConfVars.USE_THRIFT_SASL, true);
MetastoreConf.setVar(conf, ConfVars.KERBEROS_PRINCIPAL, "hive/HOSTNAME@example.com");
MetastoreConf.setVar(conf, ConfVars.KERBEROS_KEYTAB_FILE, "hive.keytab");
System.setProperty("java.security.krb5.realm", "EXAMPLE.COM");
System.setProperty("java.security.krb5.kdc", "HOSTNAME");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
HiveMetaStoreClient client = new HiveMetaStoreClient(conf);
client.close();
预期结果-
它应该成功验证连接
实际结果-
java -jar 应用程序
Kerberos username [root]:
Kerberos password [root]:
我想绕过这个 kerberos 终端提示验证。有什么办法吗?
final String user = "hive/HOSTNAME@EXAMPLE.COM";
final String keyPath = "hive.keytab";
Configuration conf = new Configuration();
System.out.println("In case of kerberos authentication");
conf.set("hadoop.security.authentication", "kerberos");
System.setProperty("java.security.krb5.kdc", "HOSTNAME");
System.setProperty("java.security.krb5.realm", "EXAMPLE.COM");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(user, keyPath);
HiveConf conf1 = new HiveConf(); MetastoreConf.setVar(conf1,
ConfVars.THRIFT_URIS, "thrift://HOSTNAME:9083"); HiveMetaStoreClient
client = new HiveMetaStoreClient(conf1);
client.close();
现在可以正常使用了
我写了一个 Java 应用程序来连接 hive-metastore。它工作正常但是当我 运行 Linux 上的 jar 文件时它要求输入 Kerberos 用户名和密码 .我已经在我的代码中指定了 Kerberos 主体和密钥表文件。而且我不想使用额外的 jass.config 文件。有什么办法可以解决这个问题吗?
这是我的源代码
HiveConf conf = new HiveConf();
MetastoreConf.setVar(conf, ConfVars.THRIFT_URIS, "thrift://HOSTNAME:9083");
MetastoreConf.setBoolVar(conf, ConfVars.USE_THRIFT_SASL, true);
MetastoreConf.setVar(conf, ConfVars.KERBEROS_PRINCIPAL, "hive/HOSTNAME@example.com");
MetastoreConf.setVar(conf, ConfVars.KERBEROS_KEYTAB_FILE, "hive.keytab");
System.setProperty("java.security.krb5.realm", "EXAMPLE.COM");
System.setProperty("java.security.krb5.kdc", "HOSTNAME");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
HiveMetaStoreClient client = new HiveMetaStoreClient(conf);
client.close();
预期结果- 它应该成功验证连接
实际结果-
java -jar 应用程序
Kerberos username [root]: Kerberos password [root]:
我想绕过这个 kerberos 终端提示验证。有什么办法吗?
final String user = "hive/HOSTNAME@EXAMPLE.COM";
final String keyPath = "hive.keytab";
Configuration conf = new Configuration();
System.out.println("In case of kerberos authentication");
conf.set("hadoop.security.authentication", "kerberos");
System.setProperty("java.security.krb5.kdc", "HOSTNAME");
System.setProperty("java.security.krb5.realm", "EXAMPLE.COM");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(user, keyPath);
HiveConf conf1 = new HiveConf(); MetastoreConf.setVar(conf1,
ConfVars.THRIFT_URIS, "thrift://HOSTNAME:9083"); HiveMetaStoreClient
client = new HiveMetaStoreClient(conf1);
client.close();
现在可以正常使用了