我有一個在一臺服務器上運行的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分支不被更改或以其他方式被篡改?
看起來它可能是由我們的網絡配置完全不相關的部分造成的。我認爲我的兩個不同的服務器實際上都符合同一個地方,因此改變一個上的git情況也會改變......因爲它們是同一臺服務器。一旦我確認這是問題,我會進行更新。 – RMarlow