Gitosis发布接收钩子以部署存储库获取公钥错误

Gitosis发布接收钩子以部署存储库获取公钥错误,git,gitosis,githooks,Git,Gitosis,Githooks,我在我的服务器上安装了gitosis,我正在尝试创建一个post接收钩子,它将签出对远程机器上工作目录的更改 最初,我遇到一个错误,说无法打开/home/user/source/testing local/.git/FETCH\u HEAD:权限被拒绝,因此我将工作目录的.git文件夹的组所有权更改为git用户 接下来,我得到了错误主机密钥验证失败,这导致我检查哪个用户正在运行钩子,当然是git(愚蠢的我!),因此我在gitosis中为gitosis运行的git用户设置了一个密钥,并在gitos

我在我的服务器上安装了gitosis,我正在尝试创建一个post接收钩子,它将签出对远程机器上工作目录的更改

最初,我遇到一个错误,说
无法打开/home/user/source/testing local/.git/FETCH\u HEAD:权限被拒绝
,因此我将工作目录的.git文件夹的组所有权更改为git用户

接下来,我得到了错误
主机密钥验证失败
,这导致我检查哪个用户正在运行钩子,当然是git(愚蠢的我!),因此我在gitosis中为gitosis运行的git用户设置了一个密钥,并在gitosis.conf中启用了它。现在我的旧
权限被拒绝(公钥)。

我的post接收挂钩如下所示:

#!/bin/bash
while read oldrev newrev refname
do
  if [ "$refname" == "refs/heads/master" ]; then
    WORKDIR=/home/user/source/testing-local
    export GIT_DIR=$WORKDIR/.git
    pushd $WORKDIR >/dev/null
    id
    git pull --quiet >/dev/null
  fi
done
id
调用只是为了检查我作为哪个用户运行


有没有更简单的方法来实现这一点?!我的设置中是否遗漏了一些关键点?

您需要确保执行该钩子的git用户的
$HOME
环境变量的值

$HOME/.ssh
是ssh在握手过程中查找私钥的地方。
另外,请确保gitosis端的ssh目录

最后查看,它重复了我上面提到的关于
主页的内容:

这通常是由于
ssh
找不到您的密钥造成的。
确保您的密钥位于默认位置,
~/.ssh


+1第二行有一个输入错误,顺便说一句,
$HOME/ssh
应该是
$HOME/.ssh
@Mark:。。。而且是固定的。谢谢:)@VonC我已经按照您的建议检查了所有权限,并通过github帮助进行了检查。我现在在.ssh/config文件中指定了所有必要的选项,只是为了确定。如果我弄乱了git用户的授权密钥,这样我就可以按原样登录(然后恢复原样),我就可以成功地在正确的目录中执行拉入操作,但是post receive脚本仍然会被拒绝权限。关于如何进行进一步调试,有什么想法吗?@ghickman:在运行
post receive
时,尝试显示
用户
$HOME
:权限被拒绝意味着a/授权的\u密钥中没有公钥(或者是公钥,但键入错误),或者b/无法访问私钥。也就是说,用户实际执行
post receive
hook的私钥。@VonC用户是git,$HOME是/HOME/git。为了安全起见,我检查了authorized_keys文件,但它是由gitosis管理配置处理的。私钥具有以下权限:-rw-----1 git
server$ chmod go-w ~/
server$ chmod 700 ~/.ssh
server$ chmod 600 ~/.ssh/authorized_keys