
我有一個公鑰-私鑰對~/.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
不會取消設定變數。ssh
aftersu
能夠透過變數找到套接字。通常,除所有者之外的使用者無法存取套接字,但現在ssh
以 root 身份運行,並且 root 可以存取(幾乎)任何文件,無論其權限如何。
sudo
做取消設定變數(預設;請參閱這和那)。ssh
insudo ssh …
無法找到套接字。就好像經紀人不在場一樣。ssh
嘗試在 中的幾個預設位置找到正確的私鑰~/.ssh
,但現在它檢查根目錄的主目錄,而不是正確私鑰所在的常規使用者的主目錄。
答案2
您可以使用 ssh 的 -i 選項將路徑傳遞給您的識別檔。
ssh user@host -i /path/to/keyfile