linux - 如何让 git 在 pull 时不要求输入密码?

标签 linux git

我有以下设置:

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

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

注意:我在 pull 时以 root 身份登录。

有人可以帮我吗?

最佳答案

有几个选项,具体取决于您的要求,尤其是您的安全需求。对于 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>

嵌入的 url 将采用以下形式:

http://user:pass@hostname/repo

由于 git 不会为您进行身份验证,因此在将请求传递到 git 工具之前,您需要配置一个网络服务器(例如 apache)来执行身份验证。另请记住,使用嵌入式方法存在安全风险,即使您使用 https,因为它是请求的 url 的一部分。

如果您希望能够以非交互方式 pull ,但又要防止匿名用户访问 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 key 对来更新 repo 。

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

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

密码保护

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

总结

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

使用类似 gitolite 的东西会为 SSH 类型设置抽象出很多配置,如果你认为你可能有额外的存储库或需要指定不同的访问级别,绝对推荐使用。它的日志记录和审计也非常有用。

如果您只想通过 http 进行 pull ,git-http-backend 手册页应该包含足够的信息来配置 apache 来完成需要的工作。

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

关于linux - 如何让 git 在 pull 时不要求输入密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11947112/

相关文章:

linux - 如果 git 仓库已经存在,我可以克隆它吗?

Git CHMOD 接收后 Hook

git - 尝试签署提交 (GPG) 时,IntelliJ 无法提交更改

git - 克隆 pull 请求

java - 在 Linux 机器上指定包位置的最佳方法

linux - 为内核模块导出每个 cpu 符号

linux - 为什么 Bash 在定义函数时返回错误 `' ash`?

linux - 从 Matlab 中调用 R

c - 如何验证 ICMPv6 校验和? (为什么我总是得到 0x3fff 的校验和?)

git - 在 GitHub 上更新 fork 项目