7

我设置了一个 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我收到以下错误:权限被拒绝(公钥)。致命:远端意外挂断

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

当我跑

<?php echo `whoami`;

它输出mysite

4

3 回答 3

3

正如评论,首先尝试一个 https url:

 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)

如果执行脚本的用户是 ' mysite',那么它将寻找~mysite/.ssh/id_rsa.
并且您需要确保ssh-agent以用户身份运行mysite这就是为什么一开始使用不受密码保护的私钥来尝试它更容易的原因。

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

~mysite/.ssh/config

在该配置文件中,如此处所示,您可以指定要使用的密钥的位置和名称。

于 2013-10-19T16:06:46.623 回答
2

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

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

编辑您的 .git/config 并从

url = git@github.com:git_repo_name.git

url = git@github_server:git_repo_name.git

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

于 2013-10-25T21:58:16.187 回答
2

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

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

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

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

Github 已经广泛涵盖了这个问题:https ://help.github.com/articles/error-permission-denied-publickey

于 2013-10-25T16:14:43.763 回答