2011-03-29 36 views
3

我在我的服务器上设置了gitosis设置,我试图创建一个post-receive钩子来检查远程计算机上工作目录的更改。Gitosis post-receive hook部署存储库获取公钥错误

最初我得到一个错误,说cannot open /home/user/source/testing-local/.git/FETCH_HEAD: Permission denied所以我将工作目录的.git文件夹的组所有权更改为git用户。

之后我得到了错误Host key verification failed,这导致我检查哪个用户正在运行钩子,当然是git(愚蠢的我!),所以我在gitosis中为git用户设置了一个gitosis密钥,并启用了gitosis那在gitosis.conf中。现在我越来越老Permission denied (publickey).

我的后收到钩看起来是这样的:

#!/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调用只是为了检查我跑作为用户。

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

回答

2

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

$HOME/.ssh是在握手期间ssh将寻找私钥的地方。
另外,请确保gitosis上的ssh目录结束has the right permissions

server$ chmod go-w ~/ 
server$ chmod 700 ~/.ssh 
server$ chmod 600 ~/.ssh/authorized_keys 

终于看到"Permission denied (publickey)" section on GitHub,其中重复一下我上面提到的关于HOME

ssh无法找到你的钥匙这通常引起的。
确保您的钥匙位于默认位置~/.ssh

+0

+1在第二行有一个错字,顺便说一句 - '$ HOME/ssh'应该是'$ HOME/.ssh' – 2011-03-29 10:45:51

+0

@Mark:...并且是固定的。谢谢:) – VonC 2011-03-29 10:52:25

+0

@VonC我已经检查了所有的权限,正如你所建议的,并通过github的帮助。我现在已经在.ssh/config文件中指定了所有必要的选项,只是为了确定。如果我混淆了git用户的authorized_keys,那么我可以以它的身份登录(然后将其恢复到原来的样子),我可以成功地在正确的目录中执行操作,但post-receive脚本仍然会获得权限拒绝。有关我如何进一步调试的想法? – ghickman 2011-03-29 14:29:51