![](/img/trans.png)
[英]Git on Windows not asking for SSH key password, or using SSH Key
[英]How to prevent that the password to decrypt the private key has to be entered every time when using Git Bash on Windows?
我有一個自動構建服務,可以從git私有存儲庫下載。 問題是,當它試圖克隆存儲庫時,它需要提供密碼,因為它不會被記住; 因為沒有人工交互,它會永遠等待密碼。 如何從id_rsa.pub強制記住它?
對於Windows用戶,只需注意這是我設置Git Bash環境以便在啟動時登錄一次的方法 。 我編輯~/.bashrc
文件:
eval `ssh-agent`
ssh-add
所以當我啟動Git Bash時,它看起來像:
Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)
現在我可以ssh到其他服務器而無需每次都登錄。
這個答案解釋了如何永久存儲GitHub用戶名和密碼,而不是SSH密鑰密碼。
在Windows中,只需運行
$ git config --global credential.helper wincred
這意味着下次推送時,您將像往常一樣輸入用戶名和密碼,但它們將保存在Windows憑據中。 之后你不必再輸入它們了。
打開新終端時,我不想輸入我的SSH密碼; 不幸的是, starmonkey的解決方案需要為每個會話輸入密碼。 相反,我在.bash_profile
文件中有這個:
# Note: ~/.ssh/environment should not be used, as it
# already has a different purpose in SSH.
env=~/.ssh/agent.env
# Note: Don't bother checking SSH_AGENT_PID. It's not used
# by SSH itself, and it might even be incorrect
# (for example, when using agent-forwarding over SSH).
agent_is_running() {
if [ "$SSH_AUTH_SOCK" ]; then
# ssh-add returns:
# 0 = agent running, has keys
# 1 = agent running, no keys
# 2 = agent not running
ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
else
false
fi
}
agent_has_keys() {
ssh-add -l >/dev/null 2>&1
}
agent_load_env() {
. "$env" >/dev/null
}
agent_start() {
(umask 077; ssh-agent >"$env")
. "$env" >/dev/null
}
if ! agent_is_running; then
agent_load_env
fi
# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
agent_start
ssh-add
elif ! agent_has_keys; then
ssh-add
fi
unset env
這將記住我的新終端會話的密碼; 當我在啟動后打開第一個終端時,我只需要輸入一次。
我想相信我得到了這個; 這是對其他人工作的修改,但我不記得它來自哪里。 謝謝匿名作者!
更新2019-07-01:我不認為這一切都是必要的。 我現在一直通過確保我的.bash_profile
文件運行ssh-agent來實現這一點:
eval $(ssh-agent)
然后我設置一個像這樣的ssh
配置文件:
touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config
如果我正確理解了這個問題,那么您已經在構建服務中使用了授權的SSH密鑰,但是您希望避免為每個克隆鍵入密碼?
我可以想到兩種方法:
如果以交互方式啟動構建服務:在啟動構建服務之前,請使用足夠長的超時( -t
選項)啟動ssh-agent
。 然后使用ssh-add
(msysGit應該有這些)在開始構建服務之前添加所需的所有私鑰。 您仍然需要鍵入所有密碼,但每次服務啟動只需輸入一次。
如果您想避免必須輸出密碼短語,您可以隨時從SSH密鑰中刪除密碼短語,如https://serverfault.com/questions/50775/how-do-i-change-my-中所述private-key-passphrase ,通過設置一個空的新密碼。 這應該完全取消密碼提示,但它比以前的選項更不安全。
當我試圖推送我的代碼時,我收到以下錯誤:
$ git push origin dev
remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403
經過幾個小時的研究,我發現我需要使用以下命令:
$ git config --global credential.helper cache
執行上述命令后,我收到輸入GitHub用戶名和密碼的提示。 提供正確的憑據后,我可以推送我的代碼。
正確的解決方案是:
運行Windows默認終端 - cmd並獲取主配置文件的目錄
echo %USERPROFILE%
在上面的目錄中運行Git Bash並使用該命令創建.bashrc
文件
echo "" > .bashrc
使用您喜歡的文本編輯器打開.bashrc
文件,並將GitHub幫助中的代碼粘貼到該文件中:
env=~/.ssh/agent.env ... COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
重啟Git Bash,它會詢問您的密碼(僅限第一次)並完成。 沒有密碼再次困擾。
您需要在要連接到存儲庫服務器的用戶的.ssh
文件夾下創建authorized_keys
文件。 例如,假設您在repo.server
上使用用戶名buildservice
,您可以運行:
cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys
然后你必須檢查以下事項:
相應的id_rsa
私鑰在builservice@build.server:~/.shh/id_rsa
。
repo.server的指紋存儲在buildservice@build.server:~/.ssh/known_hosts
文件中。 通常,這將在首次嘗試ssh
連接到repo.server
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.