mac - unable to start ssh-agent service error:1058




無法打開與身份驗證代理的連接 (20)

注意:這是這個問題的答案,已與此問題合併。 這個問題適用於Windows 7,這意味著我的答案是針對Cygwin / MSYS / MSYS2。 對於某些unix來說,這個似乎是一個unix,我不希望SSH代理需要像這樣管理。

這將運行SSH代理並僅在您第一次需要時進行身份驗證,而不是每次打開Bash終端時都進行身份驗證。 它可以用於任何使用SSH的程序,包括ssh本身和scp。 只需將其添加到/etc/profile.d/ssh-helper.sh

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "[email protected]"; }

我遇到了這個錯誤:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

我試圖添加密鑰,我在下面收到此錯誤:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

無法打開與身份驗證代理的連接

要解決此錯誤:

慶典:

$ eval `ssh-agent -s`

tcsh中:

$ eval `ssh-agent -c`

然後像往常一樣使用ssh-add

熱門提示:

我總是忘記為上面的ssh-agent命令輸入什麼,所以我在我的.bashrc文件中創建了一個別名,如下所示:

alias ssh-agent-cyg='eval `ssh-agent -s`'

現在我可以使用ssh-agent-cyg而不是使用ssh-agent

例如

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

原始修復源:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


你有沒有啟動ssh-agent

您可能需要在運行ssh-add命令之前啟動ssh-agent

eval `ssh-agent -s`
ssh-add

請注意,這將在Windows上啟動msysgit Bash的代理。 如果您使用的是其他shell或操作系統,則可能需要使用該命令的變體,例如其他答案中列出的變體。

請參閱以下答案:

  1. ssh-add抱怨:無法打開與身份驗證代理的連接
  2. Git push需要用戶名和密碼 (包含有關如何使用ssh-agent的詳細說明)
  3. 如何運行(git / ssh)身份驗證代理? 。
  4. 無法打開與身份驗證代理的連接

要自動啟動ssh-agent並允許單個實例在多個控制台窗口中工作,請參閱登錄時啟動ssh-agent 。

為什麼我們需要使用eval而不僅僅是ssh-agent

要找出原因,請參閱Robin Green的回答 。

公鑰與私鑰

此外,每當我使用ssh-add ,我總是添加私鑰。 文件~/.ssh/id_rsa.pub看起來像一個公鑰,我不確定這是否可行。 你有~/.ssh/id_rsa文件嗎? 如果你在文本編輯器中打開它,它是否說它是私鑰?


ssh-add和ssh(假設您使用的是openssh實現)需要一個環境變量來知道如何與ssh代理進行通信。 如果您在不同的命令提示符窗口中將代理程序啟動到您現在正在使用的代理程序窗口,或者如果啟動錯誤,則ssh-add和ssh都不會看到該環境變量集(因為環境變量在本地設置為命令提示它已設置)。

你沒有說你正在使用哪個版本的ssh,但如果你正在使用cygwin,你可以在Cygwin上使用來自SSH Agent的這個配方:

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

這將為您打開的每個新命令提示符窗口自動啟動代理程序(如果您在一個會話中打開多個命令提示符,這是次優的,但至少它應該工作)。


即使我得到“無法打開與身份驗證代理的連接。” 在生成和添加SSH密鑰時運行命令: ssh-add ~/.ssh/id_rsa 。 我通過停止在我的機器上運行的多個ssh-agent實例解決了這個問題,然後從我的Windows機器上的控制面板上卸載了Git,然後再次安裝了Git,現在一切正常。


嘗試以下步驟:

1)打開Git Bash並運行: cd ~/.ssh

2)嘗試運行代理: eval $(ssh-agent)

3)現在,您可以運行以下命令: ssh-add -l


在Windows 10中,我嘗試了此處列出的所有答案,但它們似乎都沒有效果。 事實上,他們給出了一個線索。 要解決問題,只需要3個命令。 這個問題的想法是ssh-add需要使用當前的ssh-agent sock文件路徑和pid號設置SSH_AUTH_SOCK和SSH_AGENT_PID環境變量。

ssh-agent -s > temp.txt

這將在文件中保存ssh-agent的輸出。 文本文件內容將是這樣的:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

從文本文件中復制類似“/tmp/ssh-kjmxRb2764/agent.2764”的內容,並直接在控制台中運行以下命令:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

從文本文件中復制類似“3044”的內容,並直接在控制台中運行以下命令:

set SSH_AGENT_PID=3044

現在,當為當前控制台會話設置環境變量(SSH_AUTH_SOCK和SSH_AGENT_PID)時,運行ssh-add命令,它將不會再次失敗以連接ssh代理。


在我的情況下,我的Comodo防火牆已經沙箱化了ssh代理。 一旦我禁用了沙盒,我就能夠克隆存儲庫。

僅供參考,我在Windows 7上使用Comodo防火牆。


如果您按照這些說明操作,您的問題就會得到解決。

如果您使用的是Mac或Linux計算機,請鍵入:

eval "$(ssh-agent -s)"

如果您使用的是Windows計算機,請鍵入:

ssh-agent -s

對於Windows 10中內置的bash,我將其添加到.bash_profile:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi


我在Linux上遇到了同樣的問題,這就是我所做的:

基本上,命令ssh-agent啟動代理,但它並沒有真正設置環境變量來運行它。 它只是將這些變量輸出到shell。

你需要:

eval `ssh-agent`

然後執行ssh-add。 請參見無法打開與身份驗證代理的連接


我沒有使用$ ssh-agent -s ,而是使用$ eval `ssh-agent -s`來解決這個問題。

這是我一步一步執行的(GitBash上的第2步):

  1. C:\user\<username>\.ssh\ 。ssh C:\user\<username>\.ssh\清理我的.ssh文件夾
  2. 生成新的SSH密鑰
    $ ssh-keygen -t rsa -b 4096 -C "[email protected]"
  3. 檢查是否有任何進程ID(ssh代理)已在運行。
    $ ps aux | grep ssh
  4. (可選)如果在步驟3中找到任何內容,請將其刪除
    $ kill <pids>
  5. 啟動了ssh代理
    $ eval \`ssh-agent -s
  6. 在步驟2中為ssh代理添加了ssh密鑰
    $ ssh-add ~/.ssh/id_rsa

我通過強制停止(殺死)git進程(ssh代理),然後卸載Git,然後再次安裝Git來解決錯誤。


放大n3o對Windows 7的回答......

我的問題確實是沒有設置一些必需的環境變量,並且n3o是正確的,ssh-agent告訴你如何設置這些環境變量,但實際上並沒有設置它們。

由於Windows不允許您執行“eval”,因此以下是做什麼:

用ssh-agent的輸出重定向到批處理文件

ssh-agent > temp.bat

現在使用記事本等文本編輯器編輯temp.bat。 對於前兩行中的每一行: - 在行的開頭插入單詞“set”和空格。 - 刪除第一個分號和後面的所有內容。

現在刪除第三行。 你的temp.bat應該是這樣的:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

運行temp.bat。 這將設置ssh-add工作所需的環境變量。


當我試圖在Windows上通過ssh連接到stash時,我遇到了類似的問題

這是適合我的解決方案。

  1. 事實證明我在我的Windows機器上運行了Pageant ssh代理 - 我會檢查你在運行什麼。 我懷疑它是Pageant,因為它是默認的Putty和winScp

  2. ssh-add無法在命令行中使用此類代理

  3. 您需要通過選美UI窗口添加私鑰,您可以通過雙擊任務欄中的Pageant圖標(啟動後)來獲取該私鑰。

  4. 在將密鑰添加到Pageant之前,您需要將其轉換為PPK格式。 此處提供完整說明如何將SSH密鑰轉換為ppk格式

  5. 這就對了。 一旦我將密鑰上傳到stash,我就可以使用SourceTree創建本地倉庫並克隆遠程。

希望這可以幫助...


請嘗試以下方法:

ssh-agent sh -c 'ssh-add && git push heroku master'

讓我提供另一種解決方案。 如果你剛剛安裝了Git 1.8.2.2或者你想要啟用SSH,請按照寫得好的說明進行操作。

一直到步驟5.6,你可能會遇到輕微的障礙。 如果SSH代理已在運行,則重新啟動bash時可能會收到以下錯誤消息

Could not open a connection to your authentication agent

如果這樣做,請使用以下命令查看是否正在運行多個ssh-agent進程

ps aux | grep ssh

如果您看到多個ssh-agent服務,則需要終止所有這些進程。 使用kill命令如下(PID將在您的計算機上是唯一的)

kill <PID>

例:

kill 1074

刪除所有ssh-agent進程後,運行px aux | 再次使用grep ssh命令確保它們已經消失,然後重新啟動Bash。

瞧,你現在應該得到這樣的東西:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

現在,您可以繼續執行步驟5.7及更高版本。


連接到服務器時使用參數-A,例如:

ssh -A [email protected]

來自手冊頁:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

還要檢查你的遠程網址。 使用git @ github ...而不是https:// proptocol

請參閱https://.com/a/33928364/551811







ssh-agent