PHP Github拉出脚本错误'权限被拒绝(publickey)'

时间:2013-10-16 23:18:32

标签: php git apache github ssh

我已经设置了一个PHP脚本来执行GitHub拉动:

这包含在我的Github文件夹/home/mysite/public_html/github

github_pull.php

<?php
echo `git pull 2>&1`;
?>

我的服务器已经拥有SSH公钥,就好像我从终端执行git pull

ssh username@host.com
cd public_html/github
git pull

这可以成功运行(但我必须先输入rsa密码​​的密码) 更新:不再需要密码(请参阅注释)

但是,当我运行github_pull.php时,我收到以下错误: 权限被拒绝(publickey)。致命:远程端意外挂断

SSH密钥包含在/home/mysite/.ssh/id_rsa

当我跑步时

<?php echo `whoami`;

输出mysite

3 个答案:

答案 0 :(得分:3)

如评论所述,首先尝试使用https网址:

 ssh username@host.com
 cd public_html/github
 git remote set-url origin https://github.com/username/reponame
 git pull

这比修改ssh密钥容易得多,特别是当它们受密码保护时。


如果您必须使用ssh密钥,那么您必须知道密钥的默认位置:

~/.ssh/id_rsa(.pub)

如果执行脚本的用户是&#39; mysite&#39;,则会查找~mysite/.ssh/id_rsa
您需要确保ssh-agent作为mysite用户运行。这就是为什么首先尝试使用私钥而不是密码短语保护它更容易。

如果您的ssh密钥位于其他地方,那么您需要:

~mysite/.ssh/config

在该配置文件中,illustrated here,您可以指定要使用的密钥的位置和名称。

答案 1 :(得分:2)

您应首先尝试使用实际的“mysite”帐户进行调试。

sudo -u mysite
cd ~/public_html/github
git pull

从错误日志中,它似乎是一个远程问题,而不是本地问题。这意味着SSH实际上可以访问您的私钥。

我怀疑github正在接收您自己的私人密钥(通过ssh-agent),而不是'mysite'公钥。您可以通过在PHP代码中运行ssh-add -l或使用sudo -u mysite; ssh-add -l并与github界面中注册的内容进行比较来验证这一点。

Github广泛报道了这个问题:https://help.github.com/articles/error-permission-denied-publickey

答案 2 :(得分:2)

将以下内容添加到.ssh / config

Host github_server
  HostName github.com
  User git
  IdentityFile /path/to/your/private_key

编辑.git / config并从

更新远程仓库URL
url = git@github.com:git_repo_name.git

url = git@github_server:git_repo_name.git

这应该可以帮助您使用给定的密钥登录服务器。将上面的键的路径替换为计算机上的完整实际路径。将repo名称替换为实际的repo名称。请注意,用户'mysite'可以访问密钥文件。您可以使用PHP中的fopen进行测试并确认。