2011-05-20 54 views
1

我有一個github賬戶設置到我的EC2服務器,沒有問題。當我嘗試運行一個bash腳本來'混帳拉'它不會這樣做。我會做'混帳狀態'和許多其他命令。這裏是我的sh文件Github鉤子bash腳本不能拉動

cd /var/www/html/TDS/; 
ls -la; 
type git; 

git status; 
git remote -v; 

git pull origin master; 

echo "hello world"; 

所有行工作,除了git拉。我試過git pull,git pull origin master,git fetch,git fetch origin master。我排除了所有可能性,例如權限問題和權限。

該SH文件被擊中一個PHP頁面執行時,PHP頁面看起來像這樣

<?php 
$output = shell_exec('/bin/sh /var/www/html/TDS/git.sh'); 
print_r("<pre>$output</pre>"); 
?> 

很簡單,它的工作原理減去拉請求。任何幫助都將是驚人的,我非常接近這個工作。

+0

從'git pull'失敗輸出的任何錯誤? – 2011-05-20 20:54:53

+0

我同意@Oliver。也許有些事情會標準化,以至於你沒有抓住。 – 2011-05-20 20:56:52

+0

什麼都沒有回來,沒有錯誤。 – 2011-05-20 21:28:07

回答

1

... PHP(www-data)有權限嗎?它是文件的所有者嗎?

+0

apache.apache有權限 – 2011-05-20 21:27:28

+0

用戶是Apache,組是Apache Apache – 2011-05-20 21:39:37

+0

您是否嘗試過'su apache'並手動運行該文件? – Robus 2011-05-20 21:41:24

0

這是一個到源代碼倉庫的ssh URL嗎?手動操作時你有ssh-agent嗎?您是否提供了ssh代理訪問shell腳本(提示,答案是肯定的,可以,不可以。)

因此,我們確定它是ssh訪問問題。然後您有兩個選擇:將ssh-agent憑證放入php進程,並允許php腳本訪問ssh憑證而不需要密碼。這兩種方式都是有問題的。

要將assh-agent憑證導入到php進程中,請將$ SSH_AUTH_SOCK環境變量從shell複製到您的php/shell腳本SSH_AUTH_SOCK=/tmp/ssh-wScioBA10361/agent.10361 git pull。然後假設PHP腳本有足夠的權限來訪問該文件,git pull將工作。這是有問題的,因爲您需要ssh進入系統才能獲取auth sock,將程序更改爲使用新套接字(或編寫程序以查找當前套接字),並保留所有內容。註銷,重啓等,你將失去git pull功能。

另一種選擇是爲運行git pull的php/shell用戶創建ssh證書。找到主目錄,爲該用戶創建.ssh和ssh-keygen新密鑰。您可以將私鑰設置爲不具有密碼,以便任何可以訪問此文件(安全風險!!)的人都可以使用這些憑據ssh。將公鑰添加到有權訪問git repo的帳戶的授權密鑰(gitolite將允許您限制帳戶可能擁有的特權)。

+0

克隆的url是一個ssh url。是的,ssh-agent正在運行,dopnt知道最後一個我將如何檢查? – 2011-05-20 21:29:14

+0

@Casey Becking:添加了兩種可以提供ssh命令的信息git-pull使用憑證來訪問遠程存儲庫。 – 2011-05-20 21:47:22

2

要運行git pull,運行它的用戶必須具有對git repo索引(在.git/下)的寫入權限。確保運行腳本的用戶(Apache?)擁有這些權限。

+0

所以我需要 chown apache.apache ./git? – 2011-05-20 21:30:02

+0

我已經使該文件的用戶apache和組apache,仍然沒有工作,我也試過777,並沒有工作要麼 – 2011-05-20 21:40:06

+1

Apache用戶需要SSH訪問遠程回購,我不知道任何干淨和安全的方式這樣做。我之前遇到過一個在Phusion Passenger下運行Rails應用程序的問題,我們所要做的就是設置它,以便Passenger在一個實際用戶下運行該應用程序,並在其中配置了SSH密鑰的主目錄。這是安全的,只要你想要它,通過給這個用戶只有必要的權限。我希望這有幫助。 – 2011-05-20 21:54:07