用户www-data的Github身份验证失败。

5
我正在为Github和我的服务器之间设置钩子,以便在Github请求时自动拉取新的提交。
所有设置都已完成,包括ssh密钥和git源。我可以通过运行 "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的公钥添加到仓库的部署密钥中。
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吗?
  3. 如果我没错,为什么Github拒绝我的连接?我猜这与用户www-data执行deploy.php文件并通过PHP运行命令有关。
  4. 当与Github服务器通信时,www-data没有将其私钥发送到服务器吗?
非常感谢。

我认为这应该是一个Bash脚本。 - meda
1个回答

6
根据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用户执行。

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


2
感谢您提供的有益意见。最终我发现以下步骤:1.通过$ sudo -u www-data ssh-keygen -t rsawww-data生成密钥;2.上传密钥至Github;3.通过$ ssh-keyscan -H github.com >> /var/www/.ssh/known_hostswww-data生成known_hosts;4.更改属于www-data:www-data的所有文件权限。 - Benyi
很高兴听到这个消息。 - M S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接