我已经设置了一个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
答案 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并从
更新远程仓库URLurl = git@github.com:git_repo_name.git
到
url = git@github_server:git_repo_name.git
这应该可以帮助您使用给定的密钥登录服务器。将上面的键的路径替换为计算机上的完整实际路径。将repo名称替换为实际的repo名称。请注意,用户'mysite'可以访问密钥文件。您可以使用PHP中的fopen进行测试并确认。