Using git with ssh-agent on Windows

52,435

Solution 1

posh-git and git for windows 2.7 should include everything you need to setup an ssh-agent. Once you have the module installed you can start the agent using something like:

Import-Module ~\Documents\WindowsPowerShell\Modules\posh-git\posh-git
Set-Alias ssh-agent "$env:ProgramFiles\git\usr\bin\ssh-agent.exe"
Set-Alias ssh-add "$env:ProgramFiles\git\usr\bin\ssh-add.exe"
Start-SshAgent -Quiet

You then should see the SSH_AUTH_SOCK environmental variable is set:

C:\Code\Go\src\bosun.org\cmd\scollector [master]> gci env:SSH_AUTH_SOCK

Name                           Value
----                           -----
SSH_AUTH_SOCK                  /tmp/ssh-6ORcVQvRBZ2e/agent.11668

Which the git-plus atom package should be able to use when you run commands. I was able to use Ctrl+Shift+H to bring up the git menu in atom, select push, and then push to a remote repo (not it doesn't display errors if it fails, but the new branch I pushed was there).

The ssh-agent needs to be started BEFORE you open atom so that the SSH_AUTH_SOCK environmental variable is set. If it still doesn't work you may want to test ssh in PowerShell to verify that it can connect without a password:

Set-Alias ssh "$env:ProgramFiles\git\usr\bin\ssh.exe"
ssh hostname

Solution 2

You can get the ssh-agent running using the command that comes with Git for Windows in powershell:

 start-ssh-agent.cmd

That will start up the ssh-agent.

Then you can add your key with

 ssh-add ~/.ssh/namneOfPrivateKey

Found that here: https://docs.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate?view=azure-devops

Solution 3

Since a couple of years, the ssh part has been separated from posh-git, and is now available through posh-sshell.

To install:

PowerShellGet\Install-Module posh-sshell -Scope CurrentUser
PowerShellGet\Install-Module posh-git -Scope CurrentUser

In your ps1 file:

Import-Module posh-git
Import-Module posh-sshell
Start-SshAgent

It should automagically pick up any key-files in your ~/.ssh.

Solution 4

If you are using Windows' native implementation of OpenSSH with the native ssh-agent Windows service, make sure that git for Windows was configured to use that SSH implementation when you installed it:

Screenshot of Git for Windows installer; choosing the SSH executable. The "Use external OpenSSH" option is selected.

If you used the bundled OpenSSH installation, git will default to that and will not use any keys imported into Windows' native ssh-agent service. You need to select "Use external OpenSSH" instead when prompted.

If you did not make this selection when installing, you should be able to fix that by just running the installer again.

Share:
52,435
LuMa
Author by

LuMa

I'm just another German student who does some coding in his freetime...

Updated on July 09, 2022

Comments

  • LuMa
    LuMa almost 2 years

    I'm on Windows. I installed git and posh-git (some helpers for Windows PowerShell). I can add keys with ssh-add and can authenticate with github and my webserver. I can also use git from the PowerShell to interact with my repositories.

    But there is one thing I can't do: I use git-plus for the Atom editor. And I don't get it to push to my repo. What is my problem?

  • LuMa
    LuMa over 8 years
    Yes, the SSH_AUTH_SOCK variable is set. Furthermore connecting without an unprotected key worked from within Atom and git-plus. Agent is running, identities are imported. I can establish a connection with ssh, but git-plus won't work with protected keys.
  • Greg Bray
    Greg Bray over 8 years
    what do you mean by protected keys?
  • LuMa
    LuMa over 8 years
    Keys which are protected by a passphrase. For example I create a key following the GitHub docs: help.github.com/articles/generating-ssh-keys Creating key (id_rsa), protecting it with a passphrase and adding it to the ssh agent. Then I add it to GitHub and my webserver. Now I can use PowerShell, cd into my local project and push/pull without entering the key's passphrase. Even using ssh to connect to my webserver works. However, git-plus won't work. Only if I delete the passphrase from my key (using ssh-keygen -p) git-plus will do it's job. So why won't git-plus use the ssh-agent?
  • Blake Niemyjski
    Blake Niemyjski almost 7 years
    After trying for over an hour, this is the only thing that worked.. haacked.com/archive/2011/12/19/get-git-for-windows.aspx
  • fiat
    fiat almost 6 years
    Adding the alias commands to My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 did the trick.
  • 8protons
    8protons almost 5 years
    I went through these steps and there is not folder `C:\Code`
  • Andrew Savinykh
    Andrew Savinykh over 4 years
    There is no longer Start-SshAgent in posh-git.
  • Kohányi Róbert
    Kohányi Róbert over 4 years
    @AndrewSavinykh It's in a separate module called posh-sshell.
  • GreenRaccoon23
    GreenRaccoon23 over 4 years
    Running start-ssh-agent.cmd will open a CMD shell. You probably need to stay in this shell in order to run ssh-add. start-ssh-agent.cmd sets the variable SSH_AUTH_SOCK, which is required by ssh-add, but this variable cannot be accessed outside this CMD shell. Therefore, ssh-add needs to run inside this CMD shell. The CMD equivalent to the example in this answer would be ssh-add "%USERPROFILE%\.ssh\namneOfPrivateKey".
  • GreenRaccoon23
    GreenRaccoon23 over 4 years
    Also, instead of ssh-add, you may need to use C:\Program Files\Git\usr\bin\ssh-add. ssh-add resolves to C:\Windows\System32\OpenSSH\ssh-add, but git provides another version at C:\Program Files\Git\usr\bin\ssh-add. start-ssh-agent.cmd has a bug where it does not recognize that ssh-agent is in the PATH, so it uses the git version. Since it uses git's ssh-agent, you need to use git's ssh-add too. Therefore, you need to specify the full path to the git version. This changes the example command to "C:\Program Files\Git\usr\bin\ssh-add" "%USERPROFILE%\.ssh\namneOfPrivateKey".
  • ericb
    ericb almost 3 years
    This should now be the accepted answer for any posh-git / ssh issues. Wish I could upvote more than once.
  • wordsforthewise
    wordsforthewise about 2 years
    This didn't work. It started something but I couldn't add the ssh key then.
  • Monica
    Monica about 2 years
    @ЗеленыйЕнот23 could you please explain ,how exactly should I write command in Windows cmd? I think your answer is that I need, but I can't write this command. Now I use this: C:\Program Files\Git\usr\bin\ssh-add C:\Users\Me\.ssh\id_rsa