sudo 無法存取私鑰

sudo 無法存取私鑰

我有一個公鑰-私鑰對~/.ssh用於 SSH 連接到 GitHub。

為了測試我是否正確設定了 GitHub 的 SSH,我使用了,效果很好。ssh -T [email protected]

另外,如果我以超級用戶身份執行上述命令,它工作正常。

su
ssh -T [email protected]

但是,當我使用 sudo 時,該命令不起作用。我懷疑它無法存取~/.ssh運行時存儲的密鑰對sudo

下面的命令失敗。

sudo ssh -T [email protected]

您可以使用任何 Ubuntu 發行版輕鬆複製該問題,並且GitHub 幫助頁面。

編輯:

據我所知,我可以將私鑰傳遞給ssh如下:

ssh -i <path-to-private-key> -T [email protected]

我只是想知道為什麼使用會使私鑰無法存取。sudo ssh -T [email protected]

答案1

假設:有一個身份驗證代理正在為您的常規用戶運行,並且該代理持有密鑰。

ssh從非提升 shell 產生的 shell 繼承了關鍵的環境變量SSH_AUTH_SOCK,該變數告訴它與代理通訊的套接字的位置。ssh能夠使用代理,這就是您通常使用代理的方式。

su不會取消設定變數。sshaftersu能夠透過變數找到套接字。通常,除所有者之外的使用者無法存取套接字,但現在ssh以 root 身份運行,並且 root 可以存取(幾乎)任何文件,無論其權限如何。

sudo 取消設定變數(預設;請參閱)。sshinsudo ssh …無法找到套接字。就好像經紀人不在場一樣。ssh嘗試在 中的幾個預設位置找到正確的私鑰~/.ssh,但現在它檢查根目錄的主目錄,而不是正確私鑰所在的常規使用者的主目錄。

答案2

您可以使用 ssh 的 -i 選項將路徑傳遞給您的識別檔。

ssh user@host -i /path/to/keyfile

相關內容