我想要从Linux shell脚本中下载一个通过https保护并且需要kerberos身份验证的网站文件。我已经尝试过使用wget和curl,但似乎都不支持https上的kerberos。
有没有一款支持https上的kerberos的Linux命令行工具?如果有,如何使用它?
我想要从Linux shell脚本中下载一个通过https保护并且需要kerberos身份验证的网站文件。我已经尝试过使用wget和curl,但似乎都不支持https上的kerberos。
有没有一款支持https上的kerberos的Linux命令行工具?如果有,如何使用它?
如果curl支持GSS-Negotiate,那么完全可以使用curl进行操作。使用curl -V
命令检查是否返回带有Features行的结果中包含GSS-Negotiate(Ubuntu 12.04已经包含此功能)。您还需要Kerberos客户端工具(例如Ubuntu上的krb5-user
),并设置您的/etc/krb5.conf
文件中的REALM和kdc。请参阅MIT文档。
首先,您必须能够从与Web服务器使用相同的KDC获取票证(忽略更复杂的情况)。您要获取的域名还必须有一个逆向指针或在您的/etc/hosts
中进行配置,以便检查您的DNS是否正确。
使用kinit <some user principal>
开始操作。
然后,您可以使用curl到达想要检查的URL位置。为curl提供一个fake用户是必需的,以便接受您的协商(但实际上未使用,用户名和密码不重要)。我还使用--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:需要授权
和WWW-Authenticate: Negotiate
,则您将得到身份验证。
foo
,而是使用 -u:
(其中 :
是一个空的虚假用户名和密码)。 - mattdm请查看curl的手册页。您可以使用--negotiate参数使用SPNego / GSSAPI / Kerberos。大多数Web服务器都支持SPNego。
curl
支持SPNEGO,如果您使用fbopenssl
编译它,就可以实现该功能,因为没有内置的支持。我已经这样做了,它可以正常工作。