我正在尝试从 linux shell 编写脚本,通过 https 从 web 服务器下载文件,该文件受 kerberos 身份验证保护。我试过使用 wget 和 curl 但它们似乎都不支持 kerberos over https。
是否有支持 kerberos over https 的 linux 命令行实用程序?如果是这样,您将如何使用它?
如果 curl 具有 GSS-Negotiate,则完全有可能。检查curl -V
它应该返回一个带有GSS-Negotiate的Features行(Ubuntu 12.04 在包中有它)。您还需要 Kerberos 客户端工具(如在 Ubuntu 上)并使用 REALM 和 kdc 进行设置。参见麻省理工学院文档krb5-user
/etc/krb5.conf
首先,您必须能够从 Web 服务器使用的同一个 KDC 获得票证(忽略更复杂的可能性)。而且您要从中获取的域必须具有正确的反向指针或在您的配置中配置,/etc/hosts
因此请检查您的 DNS。
从...开始kinit <some user principal>
然后,您可以通过 curl 方式访问您要检查的 URL。curl 需要一个假用户才能接受您的协商(但实际上并未使用,与用户名或密码无关。)我还使用 a--trace-ascii-
来获取 Kerberos 错误。
例如:
curl --negotiate -u foo --trace-ascii - http://intranet/
如果你看到:
== Info: gss_init_sec_context() failed: : Credentials cache file '/tmp/krb5cc_0' not found<= Recv header, 29 bytes (0x1d)
然后你忘了kinit
或者它没有成功。
如果您看到类似的内容,但使用krb5kdc_err_s_principal_unknown
反向指针或主机条目构造的 kerberos 库在所联系的 KDC 上没有对应的主体。
否则,如果服务器发送正确的HTTP/1.1 401: Authorization Required
并且WWW-Authenticate: Negotiate
您获得身份验证。
检查 curl 手册页。您可以使用 --negotiate 来使用 SPNego/GSSAPI/Kerberos。大多数网络服务器都支持 SPNego。
curl
如果你用 编译它有 SPNEGO 支持fbopenssl
,没有内置支持。我已经做到了,并且有效。