簡體   English   中英

使用 cygwin ssh-agent 正在運行,但 git 仍在提示輸入密碼

[英]Using cygwin ssh-agent is running but git is still prompting for passphrase

我在 Windows 7 上使用 cygwin 作為我的終端。我發現了一些在 cygwin 中運行 ssh-agent 的建議,所以我不必每次運行 git fetch/pull/push 時都輸入我的密碼。 我將以下內容添加到我的 .bash_profile 並重新啟動了我的 cygwin 會話:

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent -s | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

看起來 ssh-agent 和 ssh-add 運行成功,但仍然提示我輸入密碼。

Initialising new SSH agent...
succeeded
Enter passphrase for /cygdrive/c/Users/<username>/.ssh/id_rsa:
Identity added: /cygdrive/c/Users/<username>/.ssh/id_rsa (/cygdrive/c/Users/<username>/.ssh/id_rsa)

$ ssh-add -l
2048 <fingerprint> /cygdrive/c/Users/<username>/.ssh/id_rsa (RSA)

$ git fetch --all
Fetching origin
Enter passphrase for key '/c/Users/<username>/.ssh/id_rsa':

實際上,我的 git 連接使用的是 SSH 而不是 HTTPS(已編輯的私人信息):

$ git remote -v
origin  ssh://git@XXX/XXX.git (fetch)
origin  ssh://git@XXX/XXX.git (push)

我為這個問題找到的最接近的問題是以下問題:

ssh-agent 不起作用/讓我免於為 git 輸入密碼

但是,我沒有在 /git/bin 下重命名我的 ssh。

有關如何診斷此問題的任何建議? 謝謝!

這是一個比上面更簡單的解決方案:

  1. 啟動服務(可以通過在任務欄上的搜索框中鍵入服務找到)
  2. 編輯“OpenSSH 身份驗證代理”的設置
  3. 將啟動類型設置為自動並啟動服務
  4. 啟動編輯系統環境變量(在任務欄上的搜索框中鍵入環境)
  5. 添加 GIT_SSH 變量,其值設置為“C:\\Windows\\System32\\OpenSSH\\ssh.exe”

現在,當添加 SSH 密鑰時,您將無需繼續在 Windows 命令提示符或 Cygwin Bash shell 中鍵入密碼。

問題依然存在。 似乎它與不同的路徑有關,尚未修復。 您可以考慮使用expect作為 ssh-agent 的替代方案,以通過密碼短語交互進行登錄

在 Linux 中,它使用如下安裝:

$ sudo apt-get update
$ apt-get install --assume-yes --no-install-recommends apt-utils expect 

在 cygwin 中,您可以在Tcl下找到它:

在此處輸入圖片說明

這是有關如何使用它的簡單步驟。

創建一個文件,讓我們找到它並命名~/.expect_push

#!/usr/bin/expect -f
spawn git push origin master
expect "Username for 'https://github.com':"
send "<username>\n";
expect "Password for 'https://<username>@github.com':"
send "<password>\n";
interact

將上面的<username><password>更改為您的登錄 ID,並注意以下事項:

  • 修改內容完全遵循您的 git 登錄交互。
  • 如果您的<password>包含字符$請將其設為\\$否則身份驗證將失敗。
  • 例如,如果您的密碼mypa$$word則將<password>設為mypa\\$\\$word

創建另一個文件~/.git_push

#!/usr/bin/bash
git remote set-url origin git@github.com:<username>/<repo>.git
git add .
git commit -m "my test commit using expect"
expect ~/.ssh/.expect_push

使它們可執行並在/bin創建符號鏈接

$ chmod +x ~/.expect_push
$ chmod +x ~/.git_push
$ cd /bin
$ ln -s ~/.git_push push

然后你就可以push送到遠程了,不需要填寫用戶名和密碼或密碼

$ cd /path/to/your/git/folder
$ push

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM