我在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;");
我的问题是
- 如何为
www-data
创建密钥 -
www-data
的.ssh
目录是/var/www/.ssh
吗?如果我没有错,为什么github拒绝我的连接?我猜这和用户www-data
有关,他执行deploy.php
文件并通过PHP运行命令。 - 当与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
进程的用户运行。通常apache2
和nginx
进程由www-data user
执行。
4-)当您与github服务器通信时,您应该指定发送此密钥文件的ssh密钥路径以进行授权。