Ssh

sudo -u git 複製

  • July 25, 2017

我在 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"

引用自:https://unix.stackexchange.com/questions/143783