有一段时间我一直在Git bash(Mysysgit for Windows)中使用BitBucket。最近我添加了GitHub,但是当git存储我的BitBucket凭据时,它不适用于GitHub。
我尝试过各种各样的事情和方法(在this tutorial和各种SO问题中)。
以下是我详细介绍的内容:
1)为GitHub创建密钥对。
2)将公钥上传到GitHub帐户设置中的SSH keys
。
3)测试了两个密钥对:
$ ssh -T git@github.com
Enter passphrase for key '/c/Users/***/.ssh/id_rsa_github':
Hi ***! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@bitbucket.org
logged in as ***.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
4)使用以下内容更新了我的配置文件:
Host bitbucket.*
User ***
IdentityFile ~/.ssh/id_rsa
Host github.*
HostName github.com
User ***
ForwardAgent yes
IdentityFile ~/.ssh/id_rsa_github
5)添加了私钥和密码:
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa_github
Enter passphrase for /c/Users/***/.ssh/id_rsa_github:
Identity added: /c/Users/***/.ssh/id_rsa_github (/c/Users/***/.ssh/id_rsa_github)
$ ssh-add -L
ssh-rsa **key here*** /c/Users/***/.ssh/id_rsa_github
6)添加了.bashrc
文件以自动启动ssh-agent:
eval `ssh-agent`
仍然:
$ git push origin master
Username for 'https://github.com':
我哪里错了?
编辑:按照建议切换到SSH后,git每次都不会询问我的密码/用户名。但是,现在它每次都要求我的密码短语。从一个git会话:
$ git push origin master
Enter passphrase for key '/c/Users/***/.ssh/id_rsa_github':
Counting objects: 5, done.
***
$ git commit -am "Minor edit"
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push origin master
Enter passphrase for key '/c/Users/***/.ssh/id_rsa_github':
我已将我的.bashrc
文件更新为Github suggests it,但据我了解,它只应该询问一次我的密码。即使我使用管理员权限运行mysysgit,也不会保存密码。
答案 0 :(得分:3)
GitHub提供了多种访问存储库的方法。当前默认值是通过https
URL,不使用您的SSH信息。网址如下所示:
https://github.com/<owner>/<project>.git
git@github.com:<owner>/<project>.git
只需切换到第二种,即SSH地址,Git将使用您的SSH信息。
答案 1 :(得分:0)
我通过执行以下操作解决了问题:
1)使用GitHub对.bashrc
找到here的建议(感谢@poke);
2)更改了.bashrc
代码以将位置添加到我的密钥:
...
if ! agent_is_running; then
agent_start
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_github
elif ! agent_has_keys; then
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_github
fi
...
3)根据BitBucket的文档here将我的config
文件更新为:
# Bitbucket account
Host bitbucket.org
HostName bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# GitHub account
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
4)并且,此步骤在我之前的尝试中缺失,使用bash命令ps
列出所有进程,然后kill
任何 {{1}实例(所以没有ssh-agent
再次运行)。
5)然后我重新启动了git bash,并在启动时立即提示输入Github密码。然而,这一次,它被ssh-agent记住了。
之前我还验证过没有ssh-agent
的多个实例,但我没有杀死ssh-agent
的每个实例,因为那是违反直觉的。但是,为了使ssh-agent
文件正常工作,显然需要这样做。
希望这些步骤对于遇到类似问题的其他人也有帮助。