我正在https://www.bitbucket.com上的私人存储库中处理项目。
我在本地编码,然后通过BitBucket的Windows Git客户端Sourcetree暂存,提交和推送更新。
之后,我从远程共享服务器中提取文件,这需要SSH身份验证。
为了将git repo与bitbucket帐户连接,我尝试了以下操作:
C:/Project
。git init
初始化存储库。git push -u origin --all
将repo从我的计算机推送到BitBucket。Permission denied (publickey).
ssh -Tv git@bitbucket.org
- 仍然是Permission denied
。我正在试图找出究竟出了什么问题 - 它是否找到了我的SSH密钥?密钥是否未加载到特定位置?
注意:我在BitBucket上的个人资料中加载了公钥。
答案 0 :(得分:79)
对于新的Sierra,Mac上的人可能会遇到同样的问题。解决方案是通过以下方式将私钥添加到SSH代理:
ssh-add -K ~/.ssh/id_rsa
看起来身份[id_rsa]不会被SSH代理持续存在。
请注意,这不是永久性解决方案。每次克隆新存储库时都需要这样做。至少不需要为每次推送提供私钥。
--------更新28.Sep.2017 --------
永久解决方案(On Sierra):
步骤:
1-在做任何事情之前,请确保您在后台运行ssh-agent。
通过以下方式检查ssh-agent是否正在运行:
pgrep 'ssh-agent'
如果该进程正在运行,该命令将返回该进程的PID(ProcessID)。 如果您看到一个值..转到步骤#2。如果没有,那么你需要在后台运行该代理:
eval "$(ssh-agent -s)"
2-编辑~/.ssh/config
(如果它不存在为su
则创建):
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
3-然后添加该密钥代理(将是一次):
ssh-add -K ~/.ssh/id_rsa
就是这样。
实际上步骤#2是至关重要的一步。我只是想提供一份完整的指南。
我希望这可以帮助你。'。
答案 1 :(得分:15)
我需要进一步修改这些设置SourceTree:
答案 2 :(得分:10)
我知道这已经解决了,但是要添加到已接受的答案中,您实际上并不需要Git Bash才能使其正常工作。正如Cupcake所说,PuTTY确实为私钥提供了String cyclicLeftShift(String s, int k){
String result="";
int n = k % s.length();
result = s.substring(n) + s.substring(0,n);
return result;
}
个文件,这些文件在通常的PuTTY / Pageant环境之外无法工作。
这是因为终端默认需要在.ppk
中找到名为id_rsa
的文件,而PuTTY默认不生成该文件。然而Git Bash的~/.ssh
确实如此,这就是Tom Granot的解决方案有效的原因。
但是,您可以通过PuTTY密钥生成器通过菜单中的ssh-keygen
选项导出相同的文件。请务必将其命名为Conversions/Export OpenSSH Key...
,并将其放在id_rsa
文件旁边,一切正常。
答案 3 :(得分:9)
嗯 - 经过多次试验和错误后我找到了解决方案。
显然,使用PUTTY的keygen并将新公钥存储在我的.ssh
文件夹中不起作用。
但是,使用ssh-keygen
IN GIT BASH ,然后尝试使用新生成的密钥对登录,工作正常。
出于好奇,虽然比什么都重要 - 我很想知道为什么会这样。
答案 4 :(得分:2)
在我的Mac上更新我的Sourcetree后发生了这种情况。
对我有用的只是删除~/.ssh/
文件夹中除.config
和known_hosts
文件夹之外的所有内容。然后只需转到首选项下的sourcetree,删除你的github帐户,删除所有.ssh
公钥和私钥后再次重新添加配置文件,sourcetree应该在本地重新添加密钥并添加到GitHub
答案 5 :(得分:0)
这是一个古老的问题,但是每次有MacOS更新时,我都会遇到此问题。卡塔琳娜也不例外。
首先,您应该检查配置文件以确认旧密钥是否仍然存在...它应该:
~ ls -al ~/.ssh
然后,您必须通过上面列出的名称再次添加密钥:
~ ssh-add -K ~/.ssh/[key-name]