0

因此,我正在创建一个系统来管理位于特定文件夹中的所有 drupal 网站(可以在此文件夹中创建新网站)。

下一步是创建一种允许用户将网站恢复到先前版本的方法。

我的解决方案?创建一个本地“git 服务器”,并为我的系统上执行的每个操作(例如:更新/安装模块、升级核心等)创建该站点的新版本。

我创建了一个“git”用户,负责在/~/gitrepos/. 对于每个新网站,我使用sudo -u gitapache 用户 (www-data) 来运行mkdirgit init --bare. 我目前能够创建新文件夹并在这些文件夹上初始化 git 存储库。

但是当我尝试将网站更改推送到这些存储库时,我得到“权限被拒绝”。

当检测到新站点时,我执行以下操作:

  1. 创建存储库 [使用 www-data 和sudo -u git]
    • mkdirgit init
  2. 初始化网站目录上的 git 存储库(.git 文件夹)[使用 www-data]
    • git init
  3. 将文件添加到提交队列 [使用 www-data]
    • git add *
  4. 提交更改以填充新创建的存储库 [使用 www-data]
    • git commit -m 'msg'
  5. 添加存储库的远程地址 [使用 www-data]
    • git remote add origin ssh://git@localhost/path/to/repo/
  6. 推送更改 [使用 www-data]
    • git push -u origin master

现在我被困在这一步,因为我总是得到“权限被拒绝”。

我有什么方法可以将更改推送到本地“git 服务器”而无需进行身份验证?

或者,我应该创建哪些 ssh 密钥来启用 www-data 将更改推送到本地“git 服务器”?

我真的迷路了,如果有人有一步一步的方法来设置一个本地“git 服务器”,www-data 用户可以在其中推送,那就太好了

注意: www-data 的主目录是/var/www/,因此在此目录中存储 ssh-key 不是一个好主意


是的,在问这里之前,我至少花了 4 个小时试图弄清楚这一点。

我试图遵循的一些资源:


我引用“git server”的原因是因为没有 git server这样的东西。

引自http://blogs.gurulabs.com/aaron/2008/11/setup-a-git-repository.html

换句话说,没有“git 服务器”和“git 客户端”之类的东西。Git 是由文件系统开发人员开发的,考虑到文件系统属性。因此,相反,我们有一个称为“源”的远程 Git 存储库和一个本地 Git 存储库 (...)

4

1 回答 1

1

解决方案:

假设:

  • 您的www-data主目录是/var/www/
  • 将处理所有 git 命令的用户是gituser

脚步:

要让www-data用户在不需要输入密码的情况下将更改推送到 git repo,只需:

  • 为 www-data 用户创建一个新的 ssh-key
    • www-data:~$ ssh-keygen -t rsa
    • enter每个问题(密码留空)
  • 将新创建的 ssh-key 添加到/home/gituser/.ssh/authorized_keys
    • gituser:~$ touch ~/.ssh/authorized_keys
    • gituser:~$ chmod 0600 ~/.ssh/authorized_keys
    • gituser:~$ cat /var/www/.ssh/id_rsa.pub >> /home/gituser/.ssh/authorized_keys

其背后的想法是将www-data的 ssh-key 添加到gituser的“受信任”密钥中。之后,www-data将能够通过 ssh 连接到服务器并进行身份验证,gituser而无需输入密码。

请记住,git 需要 ssh 访问服务器(至少在我所在的环境中)。

这可能会有所帮助:http ://www.linuxproblem.org/art_9.html

于 2012-06-23T15:46:53.983 回答