1

我想使用带有 curl 的 HTTPFS 将数据从本地 Windows 机器加载到 HDFS。Hadoop 集群由 Kerberos 保护。

我如何设法完成身份验证?

尝试以下语句时...

curl -k --negotiate -u : -i -X PUT "HTTP..."

它失败了

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Negotiate
Set-Cookie: hadoop.auth=; Path=/; Secure; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 997
Date: Tue, 30 Jan 2018 12:15:30 GMT

HTTP/1.1 403 Forbidden
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth=; Path=/; Secure; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 1149
Date: Tue, 30 Jan 2018 12:15:30 GMT

卷曲版本是:

curl 7.46.0 (x86_64-pc-win32) libcurl/7.46.0 OpenSSL/1.0.2e zlib/1.2.8 WinIDN libssh2/1.6.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz

我为 Windows 安装了 MIT Kerberos,它显示了一张有效的票。不幸的是,我对 Kerberos 了解不多,这就是为什么我有点卡住了。

非常感谢任何帮助或研究起点。

4

1 回答 1

1

Windows 上不需要 MIT Kerberos。您的 curl 已使用 MS 的 GSS-API 变体 SSPI 编译。启用--verbose以查看是否发送了票证。

我高度假设您的网络配置错误。启动 Wireshark,过滤“kerberos”并查找TGS-REQTGS-REP包含您设计的 SPN(是否已注册?)。

自 7.38.0 版以来,Curl 在 Windows 和类 Unix 上都能与 SPNEGO 完美配合。

此外,如果我看到 403,则说明身份验证已通过,您的帐户无权访问该资源。

于 2018-01-30T15:45:45.517 回答