git通过kerberos身份验证从Intranet应用程序推送到https存储库

时间:2015-03-17 09:23:18

标签: git authentication passwords kerberos

首先,我对https,ssl和身份验证都很新。

我开发了一个Intranet应用程序,该应用程序应该从本地git存储库(托管在Web服务器上)和远程存储库(托管在Unix服务器上)实现一些“推送”。

Web服务器是安装了IIS的Windows 2003服务器。我还在这台机器上安装了Windows git扩展。远程git URL如下所示:“https://username@server.domain.fr/team_folder/project.git”。

在Web服务器上,当我想从git bash推送远程存储库中的内容时,会显示一个openSSH弹出窗口并询问我的Windows密码。如果我输入正确的密码,则执行推送。这是由“askpass”配置引起的。

core.askpass = C:/Program Files (x86)/Git/libexec/git-core/git-gui--askpass

如果删除此配置的参数,请在命令窗口中输入密码。正常...

我的问题:我们使用kerberos进行身份验证,因此可以在不向用户询问密码的情况下实现推送操作吗?如何 ?。我尝试配置putty但暂时没有成功(就像我写的那样,我不是身份验证的专家)。

现在我使用我修改的git-credential-winstore而不是要求密码(在IIS服务器端无法使用)。当git要求GCW获取密码时,它只返回一个空密码。所以git以返回码<>结束0,我的应用程序询问用户密码,调用GCW存储它并再次调用git执行命令。它有效,但我很确定这不是最好的解决方案。

2 个答案:

答案 0 :(得分:0)

虽然,这显然不在这里,但无论如何我都会回答(Unix服务器,任何客户端):

  1. 安装mod_spnego
  2. 配置mod_spnego
  3. 在Windows上安装Git,确保已针对SSPI(libcurl)编译提供的--with-sspi
  4. 在Unix上安装Git,确保已针对GSS-API编译链接的libcurl--with-gssapi
  5. 从Git调用libcurl的方式,使用默认用户名+密码(ANYAUTH)选择:。就是这样。 libcurl应该做其余的事。

    通过受SPNEGO保护的代理服务器上的外部存储库,就像魅力一样。

答案 1 :(得分:0)

  

我们使用kerberos进行身份验证,因此可以在不向用户询问密码的情况下实现推送操作吗?

是的,从git 2.8+开始(2016年3月)

怎么样?

git config http.emptyAuth true

在http身份验证期间强制使用空用户名和密码

commit 121061fbrian m. carlson (bk2204)(2016年2月15日) Junio C Hamano -- gitster --于2016年2月24日commit 65ba75b合并)

  

http:添加选项以尝试不使用用户名的身份验证

     

使用Kerberos执行GSS-Negotiate身份验证不需要指定用户名或密码,因为该信息已经是   包含在机票本身中   但是,libcurl如果未提供用户名和密码,则拒绝执行身份验证。

     

添加一个选项http.emptyAuth,为libcurl提供一个空的用户名和密码,以便其尝试进行身份验证。

git config documentation会显示:

http.emptyAuth:
  

在不寻求用户名或密码的情况下尝试身份验证   这可用于尝试GSS-Negotiate身份验证,而无需在URL中指定用户名,因为libcurl通常需要用户名进行身份验证。

注意:它支持http://:@gitserver.example.com,自Git 2.11 +(2016年第4季度)起,它还支持http://@gitserver.example.com,如果设置了http.emptyauth,则强制使用NULL用户名。

commit 5275c30David Turner (csusbdt)(2016年10月4日) Junio C Hamano -- gitster --于2016年10月17日commit c6400bf合并)