首先,我对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执行命令。它有效,但我很确定这不是最好的解决方案。
答案 0 :(得分:0)
虽然,这显然不在这里,但无论如何我都会回答(Unix服务器,任何客户端):
mod_spnego
mod_spnego
libcurl
)编译提供的--with-sspi
libcurl
(--with-gssapi
)从Git调用libcurl
的方式,使用默认用户名+密码(ANYAUTH
)选择:
。就是这样。 libcurl
应该做其余的事。
通过受SPNEGO保护的代理服务器上的外部存储库,就像魅力一样。
答案 1 :(得分:0)
我们使用kerberos进行身份验证,因此可以在不向用户询问密码的情况下实现推送操作吗?
是的,从git 2.8+开始(2016年3月)
怎么样?
git config http.emptyAuth true
在http身份验证期间强制使用空用户名和密码:
commit 121061f见brian m. carlson (bk2204
)(2016年2月15日)
(Junio C Hamano -- gitster
--于2016年2月24日commit 65ba75b合并)
http
:添加选项以尝试不使用用户名的身份验证使用Kerberos执行GSS-Negotiate身份验证不需要指定用户名或密码,因为该信息已经是 包含在机票本身中 但是,
libcurl
如果未提供用户名和密码,则拒绝执行身份验证。添加一个选项
http.emptyAuth
,为libcurl
提供一个空的用户名和密码,以便其尝试进行身份验证。
http.emptyAuth:
在不寻求用户名或密码的情况下尝试身份验证 这可用于尝试GSS-Negotiate身份验证,而无需在URL中指定用户名,因为
libcurl
通常需要用户名进行身份验证。
注意:它支持http://:@gitserver.example.com
,自Git 2.11 +(2016年第4季度)起,它还支持http://@gitserver.example.com
,如果设置了http.emptyauth
,则强制使用NULL用户名。
commit 5275c30见David Turner (csusbdt
)(2016年10月4日)
(Junio C Hamano -- gitster
--于2016年10月17日commit c6400bf合并)