Ssh

使用 sudo 執行命令時連接到 SSH 身份驗證代理

  • January 7, 2019

我使用etckeeper將我的各種作業系統配置保持在版本控制之下。到目前為止,我只滿足於使用本地 Git 儲存庫來跟踪更改,但我突然想到我沒有充分利用這個功能,我決定配置一個遠端儲存庫來保存副本會很有用這些儲存庫,以便/etc配置可從其他機器獲得。

在遠端伺服器上,我創建了一個裸儲存庫(確保只有git使用者可以訪問其內容):

sudo -u git -H git init --bare ~git/repos/anthony-etc.git
chmod -R 700 ~git/repos/anthony-etc.git/

遠端伺服器上的 SSH 守護程序被配置為允許使用者(包括git使用者)僅使用密鑰進行身份驗證——我已經將我的個人公鑰上傳到伺服器上.authorized_keysgit使用者。

在本地機器上,我將其添加為遠端儲存庫:

sudo git remote add origin git@example.com:/home/git/repos/anthony-etc.git/

由於只有超級使用者才能修改/etc目錄(包括其.git子目錄)中的文件,所以所有 Git 命令都使用sudo.

在嘗試使用 SSH 推送之前,我檢查了是否可以使用目前的 SSH 身份驗證代理:

$ sudo ssh-add -l
Could not open a connection to your authentication agent.

這在使用執行時失敗了sudo,我想知道如何配置sudo以使用我已經作為非超級使用者使用的 SSH 身份驗證代理。

它不起作用的原因是SSH_AUTH_SOCK用於儲存 SSH 代理的 Unix 域套接字文件名的變數在通過sudo.

預設情況下,該env_reset選項在安全策略中啟用,許多 GNU/Linux 發行版通過在其配置文件sudo中提供以下行來明確這一點:/etc/sudoers

Defaults    env_reset

這可確保命令在最小環境中執行,並且在受限環境中刪除了大部分呼叫使用者的環境變數。

可以將特定變數列入白名單,以便將它們保留在環境中。為了安全起見,我使用visudo命令來編輯sudoers配置文件。此外,/etc/sudoers我沒有直接修改,而是將自定義修改添加到目錄中的單獨文件中/etc/sudoers.d/。為此,我執行sudo visudo -f /etc/sudoers.d/custom以使配置包含以下行:

Defaults    env_keep += "SSH_AUTH_SOCK"

現在,執行sudo ssh-add -l顯示我可以連接到身份驗證代理,並且可以繼續更新遠端儲存庫:

sudo git push --set-upstream origin master

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