7

GitHub プルを実行するように PHP スクリプトをセットアップしました。

これは私のGithubフォルダーに含まれています/home/mysite/public_html/github

github_pull.php

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

git pullターミナルから実行する場合と同様に、サーバーには既に SSH 公開キーがあります。

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

これは正常に機能します (ただし、最初に rsa キーのパスワードを入力する必要があります) 更新: パスワードは不要になりました (コメントを参照)

ただし、実行するgithub_pull.phpと次のエラーが表示されます: Permission denied (publickey)。致命的: リモート エンドが予期せず電話を切りました

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-agentmysite

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 を更新します。

url = git@github.com:git_repo_name.git

url = git@github_server:git_repo_name.git

これは、指定されたキーを使用してサーバーにログインするのに役立ちます。上記のキーへのパスを、マシン上の実際の完全なパスに置き換えます。リポジトリ名を実際のリポジトリ名に置き換えます。ユーザー「mysite」がキーファイルにアクセスできることに注意してください。PHP から fopen を使用してテストし、確認できます。

于 2013-10-25T21:58:16.187 に答える
2

最初に、実際の「mysite」アカウントを使用してデバッグを試みる必要があります。

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

エラー ログから、ローカルではなくリモートの問題のようです。つまり、SSH は実際に秘密鍵にアクセスできます。

github は、'mysite' 公開鍵ではなく、(ssh-agent を介して) 独自の秘密鍵を受け取っていると思われます。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 に答える