![](/img/trans.png)
[英]gitbash (cache passphrase key): Can't get the ssh-agent to run on windows, modified the .bashrc & .profile
[英]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)
我為這個問題找到的最接近的問題是以下問題:
但是,我沒有在 /git/bin 下重命名我的 ssh。
有關如何診斷此問題的任何建議? 謝謝!
這是一個比上面更簡單的解決方案:
現在,當添加 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,並注意以下事項:
<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.