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

Ben*_*nyi 5 php git ssh github nginx

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

ssh-keys, git origin 都设置好了。我可以通过运行git pull origin master. 它与外壳一起工作正常。

但是当我将该命令写入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.
Run Code Online (Sandbox Code Playgroud)

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

其实我给www-data用户生成了一个key ,放到里面/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;");
Run Code Online (Sandbox Code Playgroud)

我的问题是

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

非常感谢。

Mel*_*şek 6

根据 Benyi 的评论,通过将 GitHub 添加到已知主机解决了这个问题。

ssh-keyscan -t rsa github.com >> /var/www/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

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

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

2-) 在 linux 环境中,默认.ssh文件夹路径在用户主目录下。如果您没有指定用户的主文件夹,它应该在/home/www-data/.ssh. 如果您无法访问此文件夹,则应指定在我的示例中编写的 ssh 密钥。

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

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

  • 感谢您提供有用的意见。最后我发现 1. 通过`$ sudo -u www-data ssh-keygen -t rsa` 为`www-data` 生成密钥 2. 将密钥上传到Github 3. 通过`www-data` 生成`known_hosts` `$ ssh-keyscan -H github.com >> /var/www/.ssh/known_hosts` 4. chmod 属于`www-data:www-data` 的所有文件。 (2认同)