2017-12-22 35 views
1

에 실패했습니다. Kerberos와 Zookeeper를 설정하기 위해 필자가 수행 한 단계를 설명했습니다 here.사육사/SASL 체크섬 내가이 오류를 생성 문제를 해결하려면 어떻게

[email protected]:~/zk/zookeeper-3.4.11$ JVMFLAGS="-Djava.security.auth.login.config=/home/zookeeper/jaas/jaas.conf -Dsun.security.krb5.debug=true" bin/zkServer.sh start-foreground 
... 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbAsRep cons in KrbAsReq.getReply zookeeper/zookeeper-server-01 
2017-12-22 00:21:52,308 [myid:] - INFO [main:[email protected]] - Server successfully logged in. 
2017-12-22 00:21:52,312 [myid:] - INFO [main:[email protected]] - binding to port 0.0.0.0/0.0.0.0:2181 
2017-12-22 00:21:52,313 [myid:] - INFO [Thread-1:[email protected]] - TGT refresh thread started. 
2017-12-22 00:21:52,313 [myid:] - INFO [Thread-1:[email protected]] - TGT valid starting at:  Fri Dec 22 00:21:52 UTC 2017 
2017-12-22 00:21:52,313 [myid:] - INFO [Thread-1:[email protected]] - TGT expires:     Fri Dec 22 10:21:52 UTC 2017 
2017-12-22 00:21:52,314 [myid:] - INFO [Thread-1:[email protected]] - TGT refresh sleeping until: Fri Dec 22 08:25:59 UTC 2017 

내가하려고 할 때, 그러나,이 zkCli.sh 그것 (다른 EC2 인스턴스에서 실행), 서버가 연결을 닫고 위의 체크섬 오류를 출력 연결 : 사육사가 작동하는 것 같군.

사육사 클라이언트는 사육사 서버에 연결할 수 있도록 나타납니다

클라이언트는 사전 승인을 필요로에 대한 오류를 수신하지만 성공적으로 로그인 할 것으로 보인다

JVMFLAGS="-Djava.security.auth.login.config=/home/admin/Downloads/zookeeper-3.4.11/conf/zookeeper-test-client-jaas.conf -Dsun.security.krb5.debug=true" bin/zkCli.sh -server zookeeper-server-01.eigenroute.com:2181 
Connecting to zookeeper-server-01.eigenroute.com:2181 
2017-12-22 00:27:12,779 [myid:] - INFO [main:[email protected]] - Client environment:zookeeper.version= 
3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT 
... 
2017-12-22 00:27:12,788 [myid:] - INFO [main:[email protected]] - Client environment:user.dir=/home/admin/Downloads/zookeeper-3.4.11 
2017-12-22 00:27:12,789 [myid:] - INFO [main:[email protected]] - Initiating client connection, connectString=zookeeper-server-01.eigenroute.com:2181 sessionTimeout=30000 [email protected] 
Welcome to ZooKeeper! 
JLine support is enabled 
... 
>>> KrbAsReq creating message 
[zk: zookeeper-server-01.eigenroute.com:2181(CONNECTING) 0] >>> KrbKdcReq send: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000, number of retries =3, #bytes=166 
>>> KDCCommunication: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000,Attempt =1, #bytes=166 
>>> KrbKdcReq send: #bytes read=310 
>>>Pre-Authentication Data: 
... 
(이 성공적으로 인증을 의미합니까?) 사육사 서버에? 또는에 로그인 커버 로스?

... 
KRBError received: NEEDED_PREAUTH 
KrbAsReqBuilder: PREAUTH FAILED/REQ, re-send AS-REQ 
Using builtin default etypes for default_tkt_enctypes 
default etypes for default_tkt_enctypes: 18 17 16 23. 
Looking for keys for: zktestclient/[email protected] 
Added key: 17version: 3 
Added key: 18version: 3 
Looking for keys for: zktestclient/[email protected] 
Added key: 17version: 3 
Added key: 18version: 3 
Using builtin default etypes for default_tkt_enctypes 
default etypes for default_tkt_enctypes: 18 17 16 23. 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbAsReq creating message 
>>> KrbKdcReq send: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000, number of retries =3, #bytes=253 
>>> KDCCommunication: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000,Attempt =1, #bytes=253 
>>> KrbKdcReq send: #bytes read=742 
>>> KdcAccessibility: remove kerberos-server-01.eigenroute.com 
Looking for keys for: zktestclient/[email protected] 
Added key: 17version: 3 
Added key: 18version: 3 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbAsRep cons in KrbAsReq.getReply zktestclient/eigenroute.com 
2017-12-22 00:27:13,286 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected]] - Client successfully logged in. 
... 

클라이언트는 다음 사육사 서버에 대한 소켓 연결을 열고, SASL을 시도 그것에 인증 :

... 
2017-12-22 00:27:13,312 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected] 
5] - Opening socket connection to server 35.169.37.216/35.169.37.216:2181. Will attempt to SASL-authen 
ticate using Login Context section 'Client' 
2017-12-22 00:27:13,317 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected] 
] - Socket connection established to 35.169.37.216/35.169.37.216:2181, initiating session 
2017-12-22 00:27:13,359 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected]] - Session establishment complete on server 35.169.37.216/35.169.37.216:2181, sessionid = 0x1000436873a0001, negotiated timeout = 30000 

WATCHER:: 

WatchedEvent state:SyncConnected type:None path:null 
Found ticket for zktestclient/[email protected] to go to krbtgt/[email protected] 
COM expiring on Fri Dec 22 10:27:13 UTC 2017 
Entered Krb5Context.initSecContext with state=STATE_NEW 
Found ticket for zktestclient/[email protected] to go to krbtgt/[email protected] 
COM expiring on Fri Dec 22 10:27:13 UTC 2017 
Service ticket not found in the subject 
>>> Credentials acquireServiceCreds: same realm 
Using builtin default etypes for default_tgs_enctypes 
default etypes for default_tgs_enctypes: 18 17 16 23. 
>>> CksumType: sun.security.krb5.internal.crypto.RsaMd5CksumType 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbKdcReq send: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000, number of retries =3, #bytes=712 
>>> KDCCommunication: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000,Attempt =1, #bytes=712 
>>> KrbKdcReq send: #bytes read=678 
>>> KdcAccessibility: remove kerberos-server-01.eigenroute.com 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbApReq: APOptions are 00000000 00000000 00000000 00000000 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
Krb5Context setting mySeqNumber to: 50687702 
Krb5Context setting peerSeqNumber to: 0 
Created InitSecContextToken: 
0000: 01 00 6E 82 02 6B 30 82 02 67 A0 03 02 01 05 A1 ..n..k0..g...... 
... 
0260: 33 25 94 1F 60 93 E9 CF 7E EF 15 82 F8 6D ED 06 3%..`........m.. 
0270: 43             C 

2017-12-22 00:27:13,405 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected]] - Unable to read additional data from server sessionid 0x1000436873a0001, likely server has closed socket, closing socket connection and attempting reconnect 

WATCHER:: 

WatchedEvent state:Disconnected type:None path:null 

그래서 SASL 인증은 완전한 실패가 아니라 사육사 서버는 연결을 닫습니다 (체크섬 오류로 인해).

업데이트 # 1. T-헤론의 코멘트에 대한 응답으로, 클라이언트 시스템에 nslookup zookeeper-server-01.eigenroute.com의 결과는 다음과 같습니다, /etc/hosts 클라이언트 시스템에서

zookeeper-server-01.eigenroute.com 30 minutes A  
35.169.37.216 

enter image description here

:

Server:  172.31.0.2 
Address: 172.31.0.2#53 

Non-authoritative answer: 
Name: zookeeper-server-01.eigenroute.com 
Address: 35.169.37.216 

zookeeper-server-01.eigenroute.com에 대한 DNS 항목입니다 포함 :

127.0.1.1 ip-172-31-95-211.ec2.internal ip-172-31-95-211 
127.0.0.1 localhost 
34.239.197.36 kerberos-server-02 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts 
127.0.1.1 ip-172-31-88-14.ec2.internal ip-172-31-88-14 
127.0.0.1 localhost 
34.225.180.212 kerberos-server-01 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts 

(kerberos-server-01에 대한 항목하지 않습니다 :와 사육사 서버에서 zookeeper-server-01.eigenroute.com는, /etc/hosts 포함 (kerberos-server-02 내가 결과는 동일에서이 라인을 주석 때이 KDC 아닌, 잘못된 이름입니다) 거기에 있어야합니다 - 내가 그것을 제거하면 결과가 동일합니다).

누군가 체크섬 오류를 해결하는 방법을 설명 할 수 있습니까? 감사! 호스트 이름, 내가 zookeeper/[email protected] 생성 키 탭을 zookeeper-server-01.eigenroute.com 사용되는 사육사 서버의 JAAS 구성에서

zookeeper/[email protected] 
zookeeper/[email protected] 

:

답변

1

내 KDC는 다음과 같은 원칙을 가지고 있었다 .

대신 zookeeper/[email protected]의 키탭을 만들고 ZooKeeper 서버의 JAAS 구성에서이 키탭을 사용하면 모든 것이 작동합니다. 클라이언트의 SASL 인증이 성공했습니다.

IP 주소 대신 Kerberos 보안 주체의 이름에 정규화 된 도메인 이름 (zookeeper-server-01.eigenroute.com)을 사용하고 싶습니다. 누구든지 저에게 일하는 방법을 말할 수 있다면, 그 대답으로 받아 들일 것입니다. 그때까지는 충분합니다.

업데이트 : 알아 냈습니다. 사육사 클라이언트는 -server 인수에서 FQDN을 가져 와서이 FQDN의 IP 주소를 조회하고이 (org.apache.zookeeper.client.StaticHostProvider)에서 InetSocketAddress 개체를 만듭니다. 그런 다음 호스트 이름을 얻으려면 .getHostName (org.apache.zookeeper.ClientCnxn.SendThread.startConnect)을 호출합니다.

ec2-35-169-37-216.compute-1.amazonaws.com 

을 내 클라이언트 AWS EC2 인스턴스에,이 반환합니다 : 내 로컬 컴퓨터에서이 반환

35.169.37.216 

대신 내가 FQDN을 반환 할 것으로 예상 할 때. 내 AWS EC2 클라이언트 시스템에서, 사육사 클라이언트가 티켓을 얻기 위해 시도하는 이유는 다음과 같습니다

zookeeper/[email protected] 

:

zookeeper/[email protected] 

내 로컬 컴퓨터에, 사육사 클라이언트에 대한 티켓을 얻기 위해 시도 따라서 35.169.37.216의 DNS 역방향 조회가 zookeeper-server-01.eigenroute.com임을 확인하려면 AWS가 필요합니다. 지금까지 찾은 해결책은 to ask AWS to set up the mapping for the reverse DNS입니다.

이상적으로 ZooKeeper는이 역방향 DNS 조회를 건너 뛰고 호스트 이름으로 FQDN을 사용하는 것이 좋습니다 (어쩌면 내가 찾지 못했을 수도 있음).

+0

오늘 밤 이것을 보겠습니다. –

+1

클라이언트 컴퓨터에서 "nslookup zookeeper-server-01.eigenroute.com"의 결과는 무엇입니까? 결과가 35.169.37.216에 대한 A 레코드가 아니면 문제가됩니다. 나는 IP가 Kerberos 서비스 프린시 펄 엔트리 내부에서 작동하지만 호스트 이름은 작동하지 않기 때문에 이것을 추측하고있다. 둘째, 결과는 CNAME이 아니라 A 레코드 여야합니다. 필요한 경우 DNS를 수정하고 DNS가 이미 올바른 경우 zookeeper-server-01.eigenroute.com에 대한 잘못된 호스트 파일 항목이 클라이언트와 서버 컴퓨터에서 모두 있는지 확인하십시오. KDC는 괜찮은 것처럼 들리지만, btw. –

+0

@ T-Heron : 감사합니다 - 귀하가 제공하도록 지시 한 정보를 추가하는 질문을 편집했습니다. 사실 DNS 항목은 CNAME이 아니라 A 레코드입니다. 클라이언트와 서버 머신의'/ etc/hosts' 파일은 괜찮아 보입니다 (또는 그 안에 항목을 추가해야합니까?). 'nslookup zookeeper-server-01.eigenroute.com'의 결과가 괜찮은 것 같습니까? –