7

我有以下设置:

带有 git 的服务器 (centOS) 和同一服务器上项目的存储库。

我需要做的是能够从存储库中提取而不被要求输入密码(因为很烦人)。

注意:当我拉动时,我以 root 身份登录。

任何人都可以帮助我吗?

4

3 回答 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>

嵌入的网址将采用以下形式:

http://user:pass@hostname/repo

由于 git 不会为您执行身份验证,因此在将请求传递到 git 工具之前,您需要配置一个网络服务器(例如 apache)来执行身份验证。还要记住,使用嵌入式方法存在安全风险,即使您使用 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 私钥的人只能从 repo 中提取,并且需要不同的 ssh 密钥对来更新回购。

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

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

相位保护

可以使用 ssh-agent 在每个会话的基础上解锁,仅对从 git 进行交互式获取非常有用。由于您提到 root 并且只谈论执行“git pull”,因此听起来您的用例是非交互式的。这可能更好地与 gitolite (github.com/sitaramc/gitolite/) 结合使用。

概括

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

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

如果您只想能够通过 http 进行拉取,那么 git-http-backend 手册页应该包含足够的信息来配置 apache 来满足需要。

您始终可以将匿名 http(s) 用于克隆/拉取,与完全访问所需的密码保护 ssh 访问相结合,在这种情况下,无需设置 gitolite,您只需将 ssh 公钥添加到 ~/. ssh/authorized_keys 文件。

于 2012-08-14T13:50:26.743 回答
2

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

于 2012-08-14T06:51:02.993 回答
1

如果您使用 ssh 访问,您应该运行 ssh 代理,在此处添加您的密钥并在 repo 端注册您的公共 ssh 密钥。然后将自动使用您的 ssh 密钥。这是首选方式。

如果您使用的是 https 访问,那么您要么

使用这三种方式中的任何一种,它都不应该要求输入密码。

于 2012-08-14T09:15:26.587 回答