git pull
我每天都在我的機器上使用(沒有 sudo),我的 ssh 資料夾中有一把鑰匙( cat ~/.ssh/id_rsa.pub
)
問題是,我無法調用sudo git pull
,因為我收到錯誤:
sudo git pull
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
可能是我的鑰匙有問題。
我需要在外部腳本中調用它(使用 sudo)。
我怎樣才能打電話sudo git pull
?如何為 sudo 添加密鑰?
簡而言之:pull
不起作用,sudo
為什麼?
答案1
sudo
當您在不指定特定使用者的情況下運行某些內容時,您將以root
使用者身分執行它。
因為看起來您透過 SSH 克隆了您的儲存庫,git
(實際上我猜是 SSH)正在尋找用戶的 SSH 私鑰,root
而不是您的用戶之一:/root/.ssh/
與/home/your-user/.ssh/
.
您可以嘗試以下操作:
使用以下命令運行腳本
sudo -E
:-E
保留在 sudo 上運行時定義的用戶環境變量(我認為SSH_AUTH_SOCK
和/或SSH_AGENT_LAUNCHER
將需要一些 SSH 變量,但我不太了解細節)。在腳本中,「以使用者身分」而不是「以 root 身分」執行 git 命令。為了實現這一點,您可以
sudo
再次依賴:)sudo -E -u $(logname) git pull
請注意,您使用了sudo -E
兩次:一次呼叫腳本,另一次git
在腳本內部呼叫。
那應該有效:)
PS 如果您需要更細緻地控制將哪些環境變數匯出到 sudo,請使用--preserve-env=list
option 而不是-E
。
答案2
當您將 git 與 sudo 一起使用時,它會在 中查找密鑰/root/.ssh/
,而不是在/home/yourusername/.ssh/
.您只需將其複製到前者中就可以了。