2014-07-17 29 views
1

我有一個在一臺服務器上運行的php腳本,其中包含一個到另一臺服務器的ssh命令的exec()。該ssh命令運行包含git命令的腳本。在遠程服務器上執行的遠程文件中的git命令似乎影響了發起ssh命令的服務器,並將原始服務器留在了錯誤的git分支上。爲什麼遠程執行的git命令會影響始發服務器?

我創建了兩個腳本來最小化重現此。第一個腳本git_ssh_bug_repro_1.php打印出其主機名和git分支,然後在另一個服務器上運行第二個腳本的exec()'ed ssh命令(sudo ssh [email protected] 'php /path/git_ssh_bug_repro_2.php'),print_r是該exec的輸出,然後再次打印出其主機名然後是git分支。第二個腳本也開始打印它的主機名和當前分支,然後執行git checkout testing,然後再打印出它的主機名和分支。如描述的同時運行這兩個腳本的輸出:

[email protected]:/path# php git_ssh_bug_repro_1.php 
BEFORE running ssh command: 
COMMAND: git rev-parse --abbrev-ref HEAD 
Hostname: abc-1, current git branch: master 
COMMAND: sudo ssh [email protected] 'php /path/git_ssh_bug_repro_2.php' 
    Password authentication is disabled to avoid man-in-the-middle attacks. 
    Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks. 
    Switched to branch 'testing' 
    OUTPUT: 
    Array 
    (
     [0] => master 
     [1] => BEFORE running git checkout command: 
     [2] => COMMAND: git rev-parse --abbrev-ref HEAD 
     [3] => Hostname: test-1, current git branch: master 
     [4] => COMMAND: git checkout testing 
     [5] => OUTPUT: 
     [6] => Array 
     [7] => (
     [8] =>  [0] => master 
     [9] =>  [1] => Your branch is ahead of 'origin/testing' by 21 commits. 
     [10] =>) 
     [11] => AFTER running git checkout command: 
     [12] => COMMAND: git rev-parse --abbrev-ref HEAD 
     [13] => Hostname: test-1, current git branch: testing 
    ) 
AFTER running ssh command: 
COMMAND: git rev-parse --abbrev-ref HEAD 
Hostname: abc-1, current git branch: testing 
[email protected]:/path# 

摘要:爲什麼正在通過腳本一臺服務器上運行git命令影響其他服務器的git的狀態(在這種情況下,導致它切換到錯誤的分支),只是因爲所說的腳本是通過ssh從另一個服務器發起的?我該如何讓它不這麼做,以便原始服務器的git分支不被更改或以其他方式被篡改?

+0

看起來它可能是由我們的網絡配置完全不相關的部分造成的。我認爲我的兩個不同的服務器實際上都符合同一個地方,因此改變一個上的git情況也會改變......因爲它們是同一臺服務器。一旦我確認這是問題,我會進行更新。 – RMarlow

回答

0

是的,這原來是一種假陽性的問題。在上述兩臺服務器上,git repo目錄通過符號鏈接到同一臺服務器上的相同位置。所以,當然改變一個分支也改變了它 - 它們是同一個目錄。對錯誤的問題抱歉,並感謝任何花時間看這個的人。

相關問題