Estou usando o Kerberos para autenticação em um cluster do Amazon EMR. Meu tíquete Kerberos expirou. Quando tento executar comandos no cluster, recebo uma mensagem de erro semelhante à seguinte: 19/11/04 22:12:16 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "ip-xxx-x-x-x.ec2.internal/192.x.x.x";destination host is: "ip-xxx-x-x-x.ec2.internal":8020;
Breve descrição
Faça o seguinte para renovar um tíquete Kerberos expirado:
1. Execute o comando klist para mostrar as credenciais emitidas pelo centro de distribuição de chaves (KDC).
2. Para obter um novo ticket, execute o comando kinit e especifique um arquivo keytab que contenha credenciais ou digite a senha da entidade principal.
Resolução
1. Conecte-se ao nó principal usando SSH.
2. Para confirmar que o ticket expirou, execute o comando klist. Esse comando verifica se há um cache de credenciais. Se nenhuma credencial for armazenada em cache, o ticket expirou.
[hadoop@ip-xxx-x-x-xxx ~]$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_498)
3. Para confirmar o nome principal do Kerberos, liste o conteúdo do arquivo keytab:
[hadoop@ip-xxx-x-x-xxx ~]$ klist -kt /etc/hadoop.keytab
Keytab name: FILE:/etc/hadoop.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
2 07/04/2019 21:48:46 hadoop/ip-xxx-x-x-xxx.ec2.internal@EC2.INTERNAL
2 07/04/2019 21:48:46 hadoop/ip-xxx-x-x-xxx.ec2.internal@EC2.INTERNAL
2 07/04/2019 21:48:46 hadoop/ip-xxx-x-x-xxx.ec2.internal@EC2.INTERNAL
4. Para renovar o tíquete Kerberos, execute kinit e especifique o arquivo keytab e a entidade principal:
[hadoop@ip-xxx-x-x-xxx ~]$ kinit -kt /etc/hadoop.keytab hadoop/ip-xxx-x-x-xxx.ec2.internal@EC2.INTERNAL
5. Confirme se as credenciais estão armazenadas em cache:
[hadoop@ip-xxx-x-x-xxx ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_498
Default principal: hadoop/ip-xxx-x-x-xxx.ec2.internal@EC2.INTERNAL
Valid starting Expires Service principal
11/04/2019 22:13:47 11/05/2019 08:13:47 krbtgt/EC2.INTERNAL@EC2.INTERNAL
renew until 11/06/2019 22:13:47
6. Execute um comando HDFS para confirmar se o tíquete Kerberos está funcionando:
[hadoop@ip-XXX-XX-XX-XXX ~]$ hdfs dfs -ls /
Found 4 items
drwxr-xr-x - hdfs hadoop 0 2019-11-05 22:45 /apps
drwxrwxrwt - hdfs hadoop 0 2019-11-05 22:46 /tmp
drwxr-xr-x - hdfs hadoop 0 2019-11-05 22:45 /user
drwxr-xr-x - hdfs hadoop 0 2019-11-05 22:45 /var
Informações relacionadas
Usar a autenticação Kerberos