Linux
無法將生成的 ssh 密鑰添加到 ssh 代理“無法打開與您的身份驗證代理的連接”
首先,是的,我在這里和 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-agent
asuser
。這會初始化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-add
asroot
。除非您已明確配置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