sudo -u git 複製
我在 Ubuntu 伺服器 14.04 上。
我正在使用作為www-data執行的 apache 網路伺服器。我需要
git clone
從一個腳本(一個網路鉤子)做。該腳本將以www-data使用者權限執行。在我遇到權限問題
git clone
的目錄中作為普通使用者執行,這很好,因為我只希望www-data使用者能夠在那裡寫入。/var/www/html
www-data使用者的 home 設置為,
/var/www
並且它的 ssh 密鑰位於/var/www/.ssh
.如果我執行:
sudo git clone git@my.git.server:user/repo.git
它按預期工作 - 我的使用者的 ssh 公鑰在 authorized_keys @my.git.server 中列出。
但是,我需要從 bash 腳本執行並具有正常權限。
因此,我將www-data使用者的公共 ssh 密鑰複製到 my.git.server 上的 authorized_keys 文件中。從理論上講,這應該意味著www-data使用者可以通過 ssh 啟動 git clone,從而無需密碼並且非常安全。
所以要測試它,我想我需要執行類似的東西:
sudo -u www-data -H git clone git@my.git.server:user/repo.git
我的理解是讓我假設www-data使用者的身份,設置我的主目錄,以便在發出 over ssh
~/.ssh
時位於工作目錄中。git clone
當我嘗試執行該命令時,我遇到的問題是以下錯誤輸出:
Cloning into 'repo'... fatal: 'user/repo.git' does not appear to be a git repository fatal: Could not read from remote repository.
就像我說的,如果我以 sudo 身份執行 - 沒問題。只有當我嘗試作為 www-data 執行時。感覺命令的解釋方式存在問題,迫使它錯誤地讀取路徑/儲存庫名稱?
根據 l0b0 的響應,輸出如下:
james-c@WebHost-1:~$ sudo ssh -v git@my.git.server 2>&1 | grep 'identity file' debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_dsa type -1 debug1: identity file /root/.ssh/id_dsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ed25519 type -1 debug1: identity file /root/.ssh/id_ed25519-cert type -1 james-c@WebHost-1:~$ sudo -u www-data ssh -v git@my.git.server 2>&1 | grep 'identity file' debug1: identity file /var/www/.ssh/id_rsa type 1 debug1: identity file /var/www/.ssh/id_rsa-cert type -1 debug1: identity file /var/www/.ssh/id_dsa type -1 debug1: identity file /var/www/.ssh/id_dsa-cert type -1 debug1: identity file /var/www/.ssh/id_ecdsa type -1 debug1: identity file /var/www/.ssh/id_ecdsa-cert type -1 debug1: identity file /var/www/.ssh/id_ed25519 type -1 debug1: identity file /var/www/.ssh/id_ed25519-cert type -1
不完全確定我在這裡尋找什麼?
我遇到了同樣的問題,這樣切換使用者時似乎保留了環境。這會導致載入錯誤的 git config,由於權限問題而失敗。
就我而言,我使用以下命令繞過了這個問題
sudo -u deploydeputy /bin/bash -c "export HOME=/home/deploydeputy && git clone git@github.com:inventid/cdn.git /tmp/cdn"