2016-11-05 134 views
2

我在Github和我的服務器之間建立了一個鉤子,當Github請求觸發腳本時,它可以自動提取新的提交。Github身份驗證失敗,用戶www-data

它的所有設置完成,如ssh-keys,git origin。我可以通過運行git pull origin master從我在Github上託管的私人回購中提取新的提交。它的外殼工作正常。

但是,當我將該命令寫入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的公鑰來回購的部署密鑰。
deploy.php命令
shell_exec("cd /var/www/html/tinfo/; git pull origin master 2>&1;"); 

我的問題是

  1. 如何創建www-data的關鍵?
  2. www-data.ssh目錄/var/www/.ssh
  3. 如果我沒有錯,爲什麼github會拒絕我的連接?我想這與用戶www-data有關,他們執行deploy.php文件並通過PHP運行命令。
  4. 當與Github服務器通話時,www-data是否未將其私鑰發送到服務器?

非常感謝。

+0

我認爲這應該是一個bash腳本 – meda

回答

1

根據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進程的用戶運行。通常由www-data user執行的apache2nginx進程。

4-)當你與github服務器通話時,你應該指定你的ssh密鑰路徑來發送授權密鑰文件。

+0

謝謝你的幫助意見。最後,我發現1.通過$ sudo -u www-data ssh-keygen -t rsa'爲'www-data'生成一個密鑰2.將密鑰上傳到Github 3.爲'www-data'生成'known_hosts' '$ ssh-keyscan -H github.com >>/var/www/.ssh/known_hosts' 4. chmod屬於'www-data:www-data'的所有文件。 – Benyi

+0

很高興聽到這一點。 –

+0

感謝您編輯答案。我相信有人會認爲拒絕是令人困惑的。希望我的經驗會有幫助。並感謝您的意見。 – Benyi