每当在Windows上使用Git Bash时,如何防止密码解密私钥?

我有一个自动build设服务,从git私人存储库下载。 问题是,当它试图克隆仓库时,它需要提供密码,因为它不被记住; 所以因为没有人际交往,所以一直在等待密码。 我怎样才能强迫它记住从id_rsa.pub?

对于Windows用户,只需要注意,这是我设置Git Bash环境以便在启动时login一次的方式 。 我编辑我的〜/ .bashrc:

 eval`ssh-agent`
 SSH-ADD

所以当我启动Git Bash时,它看起来像:

欢迎来到Git(版本1.7.8-preview20111206)
 (等等)
代理pid 3376
input/c/Users/starmonkey/.ssh/id_dsa的密码:
添加了身份:/c/Users/starmonkey/.ssh/id_dsa(/c/Users/starmonkey/.ssh/id_dsa)

现在我可以ssh到其他服务器没有login每一次。

我知道这是一个古老的问题,但我今天从谷歌search来到这里,所以我希望这对别人有帮助。

这个答案解释了如何让GitHub的用户名和密码永久保存,而不是SSH密钥密码。

在Windows中,运行$ git config --global credential.helper wincred

这意味着下一次你推,你会像往常一样input你的用户名和密码,但他们将被保存在Windows凭据。 之后你不必再input。

如在http://www.tilcode.com/push-github-without-entering-username-password-windows-git-bash/

如果我正确理解了这个问题,那么您已经在构build服务中使用了授权的SSH密钥,但是您希望避免必须为每个克隆键入密码?

我可以想到这样做的两种方法:

  1. 如果您的构build服务是以交互方式启动的:在启动构build服务之前,以足够长的超时启动ssh-agent-t选项)。 然后使用ssh-add (msysGit应该有这些)来添加所有你需要的私钥,然后再启动你的构build服务。 您仍然必须input所有密码,但每次启动服务时只需input一次。

  2. 如果您想避免必须input密码短语,则可以随时从ssh密钥中删除密码短语,如https://serverfault.com/questions/50775/how-do-i-change-my-私钥密码; ,通过设置一个空的新密码。 这应该完全消除密码提示,但比以前的选项更安全。

打开新terminal时,我不想input我的ssh口令; 不幸的是,starmonkey的解决scheme需要在每个会话中input密码。 相反,我有这个在我的.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 

这将记住我新的terminal会话的密码; 启动后打开我的第一个terminal时,我只需要input一次。

我想知道我在哪里得到这个,这是对别人的工作的修改,但我不记得它来自哪里。 谢谢匿名作者!

@starmonkey说什么。 如果你对〜/ .bashrc是什么感到困惑,请检查一下这个答案: Git for Windows:.bashrc或等效的Git Bash shellconfiguration文件

当我尝试推我的代码时,我得到了以下错误:

 $ 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 

执行上面的命令后,我得到了我的git集线器用户名和密码的提示。 提供正确的凭据后,我能够推我的代码。

你需要在git bash中执行下面的命令。 执行之后,再次尝试克隆,git bash会popup用户名和密码。

(git config –global credential.helper wincred)

您需要在要连接到repo服务器的用户的.ssh文件夹下创buildauthorized_keys文件。 例如,假设你在repo.server上使用username 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