开发者

TortoiseGit using incorrect SSH key

开发者 https://www.devze.com 2023-02-17 14:57 出处:网络
I have a strange problem with tortoise git at the moment, whic开发者_如何学Ch I can\'t figure out. When trying to commit to my repository on github I get the error

I have a strange problem with tortoise git at the moment, whic开发者_如何学Ch I can't figure out. When trying to commit to my repository on github I get the error

ERROR: Permission to martindevans/Hermes.git denied to key2

Key2 is a key I use to access a different github repository, however the remote url is not set to use key2, as you can see here it's set to use private.ppk

TortoiseGit using incorrect SSH key

Am I doing something obviously wrong, or is tortoise git broken?

Nb. In response to the comments. Using normal git results in:

C:\Users\Martin\Documents\Visual Studio 2010\Projects\Hermes>git push
Permission denied (publickey).
fatal: The remote end hung up unexpectedly


There are different private key formats. My keypair was generated with puttygen, but my Tortoise was configured to use ssh.exe (form msysgit) as ssh-client. So i changed it to plink (from Tortoise) and it worked.

  • ssh-key.exe => ssh.exe (C:\msysgit\msysgit\bin)
  • puttygen.exe => TortoisePlink.exe (C:\Program Files\TortoiseGit\bin)

Additional note: Use the correct URL! Github offers you three URL https, git and ssh.


Edit:

I adapted the settings here:

Settings - TortoiseGit >> Network >> SSH-Client
C:\Program Files\TortoiseGit\bin\TortoisePLink.exe

I have generated the key-pair with:

 C:\Program Files\TortoiseGit\bin\puttygen.exe


Hah! ProcMon to the rescue. This is a bug in tortoisegit / tortoiseplink. It should give preference to the key set for that remote via pageant, but instead it gives preference to the key stored in the registry by putty for that specific server. Two fixes.

2 possible fixes here

Your tortoiseplink is integrated with putty, and it's reading the private key you have saved in the putty "Session" associated with that server. At least that's what it was for me. I'm not on github though, so I don't know the viability of this solution for everybody.

I'd recommend deleting the key set manually in the putty session configuration and using pagaent for your putty sessions, as that's what tortoise git does. This also makes tortoisegit use the key set for the remote.

  1. So, you can open up putty, load whatever session you have associated with the server, go to the Connection/SSH/Auth and modify / remove the "Private key file for authentication" value. MOdification may fix this repo but then screw up another repo if you are using different keys for the same server.

  2. You can modify / delete the registry entry yourself. it's HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\$SERVERNAME$\PublicKeyFile


I had the same problem setting up my TortoiseGit to access Bitbucket (Win10). To resolve it I had to delete the old saved host keys in the registry at HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys (not the (Default) key, tho).


create the key in git bash:

ssh-keygen -t rsa

Leave everything blank and don't set a password. Take the contents of the ~/.ssh/id_rsa.pub and paste it into the public key space provided by github.

Now test this by connecting to github via ssh. If that works, you will be able to use git.

hope this helps.


I had this exact error that randomly appeared when doing a push to GitHub. I tried everything listed here to no avail. My key was still fine - I could still connect via ssh -vT git@github.com and could push/pull via Git Bash.

I even reproduced TortoiseGit working with a new key, then switching back to the old key and failing, then switching back to the new key and failing. So this seems to be a bug in TortoiseGit's integration with PuTTY, although not the one listed in @scaryman's comment above.

In the end the following worked:

  1. Upgrade to the latest PuTTY and TortoiseGit
  2. Create a new PPK using Puttygen and add the public key to GitHub
  3. Do a pull from TortoiseGit using the new PPK
  4. Open Pageant and remove the old SSH key, so the new key is the only one listed.
  5. Delete the old PPK and remove its public key from Github. This will force all repos using the old PPK to error the first time you connect to GitHub, then they automatically switch to your new PPK.
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号