Linux

無法將生成的 ssh 密鑰添加到 ssh 代理“無法打開與您的身份驗證代理的連接”

  • November 27, 2020

首先,是的,我在這里和 stackoverflow 上閱讀了類似的問題和答案。它似乎沒有給出任何可見的結果,所以我提出了一個新問題。

我正在使用最新的 Debian Buster 並嘗試設置從終端訪問 GitHub。我按照此處此處的官方 GitHub 站點上的步驟設置 ssh 連接。

user@home-machine ~ $ sudo ssh-keygen -t ed25519 -C "my@email"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/ed25519): 
Enter passphrase (empty for no passphrase): [I don't use passphrase]
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/ed25519.
Your public key has been saved in /root/.ssh/ed25519.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx my@email
The key's randomart image is:
+--[ED25519 256]--+
xxxxxxxxxxxxxxxxxxx
+----[SHA256]-----+

user@home-machine ~ $ eval "$(ssh-agent -s)"
Agent pid 2864
user@home-machine ~ $ ssh-add ~/.ssh/id_ed25519
/home/user/.ssh/id_ed25519: No such file or directory
user@home-machine ~ $ sudo ssh-add ~/.ssh/id_ed25519
#here is me being stupid and not seeing the correct path, bu I amended the mistake below
user@home-machine ~ $ sudo ssh-add root/.ssh/id_ed25519
[sudo] password for user:
Could not open a connection to your authentication agent.

為什麼它不起作用?我究竟做錯了什麼?抱歉,我只是在學習 Linux 和 git,可能會遺漏一些東西。我會很感激你的幫助。

編輯: 試圖執行命令:

debtop@DebTop:~$ echo $SSH_AGENT_PID
2864
debtop@DebTop:~$ echo $SSH_AUTH_SOCK
/tmp/ssh-wpXiIKBOY4x7/agent.2863
debtop@DebTop:~$ eval$(ssh-agent -s)
bash: evalSSH_AUTH_SOCK=/tmp/ssh-yUWON3uD5kT5/agent.4242;: File or directory doesn't exist

我刪除了所有密鑰並嘗試再次通過整個過程。當我創建密鑰時它確實有效,而不是sudo

user@home-machine ~ $ ssh-keygen -t ed25519 -C "my@email"

感謝@Panki 的提示。不記得了,為什麼我用sudo它來創建密鑰。

user@home-machine ~ $ eval "$(ssh-agent -s)"
Agent pid 2864

在這裡你開始ssh-agentas user。這會初始化SSH_AUTH_SOCK環境變數,其他 SSH 工具使用該環境變數來查找代理的 Unix 套接字。

user@home-machine ~ $ sudo ssh-add root/.ssh/id_ed25519
[sudo] password for user:
Could not open a connection to your authentication agent.

在這裡你呼叫ssh-addas root。除非您已明確配置sudo為通過 sudo 轉換傳遞SSH_AUTH_SOCK環境變數,否則預設情況下它不會將其傳遞到root的環境。

如果沒有環境變數,該ssh-add命令將無法找到ssh-agent套接字,因為它位於一個隨機命名的子目錄中(通常是/tmp/ssh-<random_alphabet_soup>/agent.<number>)。套接字和它所在的目錄也只能由原始訪問user,但通常這對 root 來說不是問題。

如果您希望代理sudo專門為此使用者在過渡期間工作,您需要在/etc/sudoers文件中添加類似這樣的內容:

Defaults:user env_keep+=SSH_AUTH_SOCK

(當然,替換user為實際使用者名。)

如果您希望它在所有使用者使用 過渡到 root 時適用於所有使用者sudo,您可以這樣做:

Defaults>root env_keep+=SSH_AUTH_SOCK

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