簡體   English   中英

如何防止每次在Windows上使用Git Bash時都要輸入密碼來解密私鑰?

[英]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憑據中。 之后你不必再輸入它們了。

如同在每次推送到GitHub而不輸入用戶名和密碼(Windows上的Git Bash)

打開新終端時,我不想輸入我的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密鑰,但是您希望避免為每個克隆鍵入密碼?

我可以想到兩種方法:

  1. 如果以交互方式啟動構建服務:在啟動構建服務之前,請使用足夠長的超時( -t選項)啟動ssh-agent 然后使用ssh-add (msysGit應該有這些)在開始構建服務之前添加所需的所有私鑰。 您仍然需要鍵入所有密碼,但每次服務啟動只需輸入一次。

  2. 如果您想避免必須輸出密碼短語,您可以隨時從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用戶名和密碼的提示。 提供正確的憑據后,我可以推送我的代碼。

正確的解決方案是:

  1. 運行Windows默認終端 - cmd並獲取主配置文件的目錄

     echo %USERPROFILE% 
  2. 在上面的目錄中運行Git Bash並使用該命令創建.bashrc文件

     echo "" > .bashrc 
  3. 使用您喜歡的文本編輯器打開.bashrc文件,並將GitHub幫助中的代碼粘貼到該文件中:

     env=~/.ssh/agent.env ... COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG! 
  4. 重啟Git Bash,它會詢問您的密碼(僅限第一次)並完成。 沒有密碼再次困擾。

您需要在要連接到存儲庫服務器的用戶的.ssh文件夾下創建authorized_keys文件。 例如,假設您在repo.server上使用用戶名buildservice ,您可以運行:

cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys

然后你必須檢查以下事項:

  1. 相應的id_rsa私鑰在builservice@build.server:~/.shh/id_rsa

  2. repo.server的指紋存儲在buildservice@build.server:~/.ssh/known_hosts文件中。 通常,這將在首次嘗試ssh連接到repo.server

暫無
暫無

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

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