用户www-data的Github认证失败


Github authentication failed with user www-data

我在Github和我的服务器之间设置了一个钩子,当Github请求触发脚本时,它可以自动拉出新的提交。

所有设置都完成了,就像ssh-keys, git origin。我可以通过运行git pull origin master从我在Github上托管的私人回购中拉一个新的提交。它在shell中工作得很好。

但是当我把这个命令写进deploy.php文件时,它可以被Github触发,但是有错误消息。

Host key verification failed. fatal: Could not read from remote repository. 
Please make sure you have the correct access rights and the repository exists.

之后,我通过php文件运行命令whoami,它返回用户www-data

实际上,我为www-data用户生成了一个密钥,并将它们放在/var/www/.ssh中,还复制了id_rsa.pub并将其粘贴到Github,仍然有认证失败。

  • nginx
  • 所有文件设置为属于www-data:www-data
  • 我已经将www-data的公钥添加到repo的部署密钥中。
deploy.php命令
shell_exec("cd /var/www/html/tinfo/; git pull origin master 2>&1;");

我的问题是

  1. 如何为www-data创建密钥
  2. www-data.ssh目录是/var/www/.ssh吗?如果我没有错,为什么github拒绝我的连接?我猜这和用户www-data有关,他执行deploy.php文件并通过PHP运行命令。
  3. 当与Github服务器交谈时,www-data没有将其私钥发送到服务器吗?

根据Benyi的评论,将GitHub添加到已知主机中可以解决这个问题。

ssh-keyscan -t rsa github.com >> /var/www/.ssh/known_hosts

您应该首先指定ssh密钥。在那之后,你应该做你想做的git任务。

1-) Ssh密钥不是用户特定的。你可以在任何地方创建rsa密钥对。公钥应复制到github。私钥应该放在您的主机上。

2-)在linux环境下,默认的.ssh文件夹路径在用户的主目录下。如果您没有指定用户的主文件夹,它应该在/home/www-data/.ssh中。如果你不能访问这个文件夹,你应该指定你的ssh密钥,在我的例子中写。

3-)在linux环境下,deploy.php由执行nginx进程的用户运行。通常apache2nginx进程由www-data user执行。

4-)当您与github服务器通信时,您应该指定发送此密钥文件的ssh密钥路径以进行授权。