【问题标题】:Github authentication failed with user www-dataGithub 身份验证失败,用户 www-data
【发布时间】:2017-03-19 10:57:15
【问题描述】:

我在 Github 和我的服务器之间设置了一个 hook,它可以在 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用户生成了一个key,放到/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吗?
  3. 如果我没记错,为什么 github 拒绝我的连接?我猜这与用户www-data 执行deploy.php 文件并通过PHP 运行命令有关。
  4. 在与 Github 服务器通信时,www-data 是否没有将其私钥发送到服务器?

非常感谢。

【问题讨论】:

  • 我认为这应该是一个 bash 脚本

标签: php git nginx github ssh


【解决方案1】:

根据 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进程的用户运行。通常由www-data user 执行的apache2nginx 进程。

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

【讨论】:

  • 感谢您提供有用的意见。最后我发现 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. chmod 属于www-data:www-data 的所有文件。跨度>
  • 很高兴听到这个消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2017-07-25
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2015-12-01
相关资源
最近更新 更多