无法通过SSH连接到我的Bitbucket存储库 - conq:存储库访问被拒绝
无法通过SSH连接到我的Bitbucket存储库 - conq:存储库访问被拒绝
我按照无数个指南进行了尝试,但是无法使其工作。早先,我成功地通过SSH将代码推送到了我的私有Bitbucket git存储库,但现在突然间无法工作了。
我已经重新创建了带有新密码的密钥,并将其添加到了我的Bitbucket设置中,但仍然无法工作。
好吧,以下是我所采取的步骤:
1. 删除了旧的密钥对(project1和project1.pub)。
2. 使用以下命令重新创建了密钥对:ssh-keygen -f ~/.ssh/project1 -C "project1"
。
3. 在~/.ssh
目录下创建了config
文件,用于我的两个Bitbucket账户,内容如下:
Host project1 HostName bitbucket.org IdentityFile ~/.ssh/project1 Host project2 HostName bitbucket.org IdentityFile ~/.ssh/project2
4. 获取了project1.pub
文件的内容,并在我的Bitbucket账户中创建了一个新的SSH密钥条目。
5. 在我的~/.zshrc
插件列表中添加了ssh-agent
,如下所示:plugins=(git ssh-agent)
,并重新启动了终端。
6. 运行ssh-add -l
,发现只加载了project2
。
7. 运行ssh-add ~/.ssh/project1
,输入我的密码,成功加载,结果如下:
2048 SHA256:THESHA256 /Users/myuser/.ssh/project2 (RSA) 2048 SHA256:THESHA256 /Users/myuser/.ssh/project1 (RSA)
8. 重新启动终端,运行ssh-add -l
,显示了两个条目。
9. 进入我的项目,运行git push
,告诉我没有权限访问。
当我运行ssh -T git@bitbucket.com
时,它告诉我我已使用project2的用户名登录。
登录为project2_user。
我的系统是OS X 10.11.5。
我从来没有解决过在我的电脑上使用多个身份,一直使用HTTPS,但现在我需要通过SSH使一切更加安全,这也可以让我的账户启用双因素身份验证。因此,现在必须使用SSH,而我不知道该怎么办。
附:我也为project2创建了身份,但我相当肯定它也不起作用。
我遵循的指南链接:
编辑
project2没有密码,而project1有!刚才想到这可能与问题相关。
编辑2
我运行了ssh-add -D
来移除所有加载的密钥,然后添加了project1的密钥,输入密码并进行推送。它工作了。但是现在我的另一个身份不工作了,因为它的密钥没有被加载。
为什么我的多个身份无法正常工作?
问题出现的原因是在同一远程主机上的不同存储库需要使用不同的SSH身份验证。解决方法是使用SSH别名,并更新远程存储库的URL设置。
首先,检查本地存储库中的remote.origin.url
设置是否正确。确保project1
的URL为git.org:accountX/project1.git
,project2
的URL为git.org:accountY/project2.git
。
然后,更新remote.origin.url
设置。将project1
的URL更改为git:accountX/project1.git
,将project2
的URL更改为git:accountY/project2.git
。
通过这样的设置,当git需要连接到远程存储库时,它首先连接到远程服务器,而远程服务器对于这两个项目来说都是bitbucket.org
。那么git如何知道要使用哪个SSH身份验证呢?它选择与bitbucket.org
关联的某个身份验证。
通过将remote.origin.url
设置为git:accountX/project1.git
或git:accountY/project2.git
,当git被告知要连接到git
时,它会在~/.ssh/config
中查找对应的条目,并使用其中指定的身份验证。这样就可以为不同的存储库使用不同的SSH身份验证了。
另外需要注意的是,Bitbucket上的存储库是存储在"Teams"中的。所以project1
和project2
的URL可能是git.org:team/project1.git
或git.org:team/project2.git
。但是解决方法同样适用于"Teams"的情况,只需要相应地更新URL设置即可。
最后,可以尝试使用git clone project1:accountX/project1.git
和git clone project2:accountY/project2.git
命令来进行克隆操作,验证问题是否解决。