如何使Git在拉取时不要询问密码?

7

我有以下的环境:

一台装有git和项目库的服务器(centOS)。

现在我需要做的是,能够从这个项目库中进行拉取操作而不需要输入密码(因为这很烦人)。

注意: 我在进行pull操作时已经登录为root用户。

有谁能帮帮我吗?

3个回答

4

根据您的要求和安全需求,有几种选项可供选择。对于HTTP和SSH,可以选择无密码访问或需要密码访问。

HTTP

==============

无密码访问

适用于仅需要获取内容的要求,推送默认被禁用。如果意图是匿名克隆,则绝不能启用推送功能。git-http-backend的手册包含了很好的信息,在线副本位于http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html。它提供了如何配置apache以提供此功能的示例。

在.netrc文件或嵌入URL中使用用户名/密码

其中.netrc文件采用以下格式:

machine <hostname> login <username> password <password>

And embedded urls would be in the form:

http://user:pass@hostname/repo

由于Git不会自动进行身份验证,因此您需要配置诸如Apache之类的Web服务器执行身份验证,然后将请求传递给Git工具。还要注意,即使使用https也是URL的一部分,因此使用嵌入式方法存在安全风险。

如果您想能够拉取非交互式内容,但又要防止匿名用户访问Git存储库,则可以使用Apache进行基本身份验证,并最好使用.netrc文件存储凭据。请注意,一旦启用身份验证,Git将启用写入权限,因此请使用匿名http进行只读,或者如果您想要防止非交互式用户具有写入权限,则需要执行一些其他配置。

参见:

  • httpd.apache.org/docs/2.4/mod/mod_auth_basic.html以获取有关配置基本身份验证的更多信息
  • www.kernel.org/pub/software/scm/git/docs/git-http-backend.html以获取所需的Apache配置示例。


SSH

==============

无密码短语

这样做会导致安全问题,因为任何人都可以获取ssh私钥并更新远程git存储库作为该用户。如果您希望以非交互方式使用它,则建议安装类似于gitolite的东西,以便更容易确保具有ssh私钥的人只能从存储库中提取,并且需要不同的ssh密钥对来更新存储库。

有关gitolite的更多信息,请参见github.com/sitaramc/gitolite/。

stromberg.dnsalias.org/~strombrg/ssh-keys.html-用于创建无密码ssh密钥: 还可能需要涵盖管理多个ssh密钥:www.kelvinwong.ca/2011/03/30/multiple-ssh-private-keys-identityfile/

受密码短语保护

可以使用ssh-agent按每个会话解锁,仅在从git进行交互式获取时才真正有用。由于您提到根并且只谈论执行' git pull',因此看起来您的用例是非交互性的。这是可能与gitolite结合使用的东西(github.com/sitaramc/gitolite/)。

总结

==============

使用类似于gitolite的东西将为SSH类型设置抽象出大量配置,并且如果您认为可能具有其他存储库或需要指定不同级别的访问权限,则绝对建议使用它。它的日志记录和审计也非常有用。

如果您只想通过http拉取,则git-http-backend手册应包含足够的信息来配置Apache执行所需的操作。

对于克隆/提取,您始终可以结合使用匿名http(s)和需要完全访问所需的受密码短语保护的ssh访问,这样就无需设置gitolite,而只需将ssh公钥添加到〜/ .ssh / authorized_keys文件中即可。


2

请参考这个问题的答案。您应该使用SSH访问而不是HTTPS/GIT,并通过您的SSH公钥进行身份验证。这在本地也应该有效。


1

如果您使用ssh访问,应该启动ssh代理,将您的密钥添加到其中,并在存储库端注册您的公共ssh密钥。然后,您的ssh密钥将自动使用。这是首选方式。

如果您使用https访问,则可以选择:

通过这三种方式之一,都不会要求输入密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接