我有以下设置:
带有git的服务器(centOS)和同一服务器上的项目的存储库.
我需要做的是能够从存储库中提取而不被要求输入密码(因为这很烦人).
注意:当我拉动时,我以root身份登录.
任何人都可以帮助我吗?
有几个选项,具体取决于您的要求,特别是您的安全需求。对于 HTTP 和 SSH,都存在无密码或需要密码的访问。
=============
对于仅获取要求很有用,默认情况下禁用推送。如果匿名克隆是有意的,那就完美了。您绝对不应该启用此类配置的推送。git-http-backend 的手册页包含很好的信息,在线副本位于http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html。它提供了如何配置 apache 来提供此功能的示例。
.netrc 文件使用的形式如下:
machine <hostname> login <username> password <password>
Run Code Online (Sandbox Code Playgroud)
嵌入的网址将采用以下形式:
http://user:pass@hostname/repo
Run Code Online (Sandbox Code Playgroud)
由于 git 不会为您执行身份验证,因此在将请求传递到 git 工具之前,您需要配置一个 Web 服务器(例如 apache)来执行身份验证。另请记住,即使您使用 https,使用嵌入式方法也会存在安全风险,因为它是所请求的 url 的一部分。
如果您希望能够非交互式拉取,但阻止匿名用户访问 git 存储库,这应该是一个相当轻量级的解决方案,使用 apache 进行基本身份验证,最好使用 .netrc 文件来存储凭据。作为一个小问题,一旦使用身份验证,git 将启用写访问权限,因此要么使用匿名 http 进行只读,要么如果您想阻止非交互式用户具有写访问权限,则需要执行一些额外的配置。
看:
=============
存在安全问题,因为任何能够获取 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-密钥-身份文件/
可以使用 ssh-agent 在每个会话的基础上解锁,仅对从 git 进行交互式获取真正有用。由于您提到 root 并且只谈论执行“git pull”,所以听起来您的用例是非交互式的。这可能与 gitolite (github.com/sitaramc/gitolite/) 结合得更好。
=============
使用 gitolite 之类的东西会抽象出 SSH 类型设置的大量配置,如果您认为您可能有其他存储库或需要指定不同的访问级别,那么绝对推荐使用 gitolite。它的日志记录和审计也非常有用。
如果您只是希望能够通过 http 拉取,那么 git-http-backend 手册页应该包含足够的信息来配置 apache 来执行所需的操作。
您始终可以将匿名 http(s) 与克隆/拉取结合起来,并使用完全访问所需的受密码保护的 ssh 访问,在这种情况下,无需设置 gitolite,您只需将 ssh 公钥添加到 ~/. ssh/authorized_keys 文件。