Skip to content

Instantly share code, notes, and snippets.

@danieldogeanu
Last active October 31, 2024 20:59
Show Gist options
  • Save danieldogeanu/16c61e9b80345c5837b9e5045a701c99 to your computer and use it in GitHub Desktop.
Save danieldogeanu/16c61e9b80345c5837b9e5045a701c99 to your computer and use it in GitHub Desktop.
How to make Powershell remember the SSH key passphrase.

You should not use the Open SSH client that comes with Git for Windows. Instead, Windows 10 has its own implementation of Open SSH that is integrated with the system. To achieve this:

  1. Start the ssh-agent from Windows Services:
  • Type Services in the Start Menu or Win+R and then type services.msc to launch the Services window;
  • Find the OpenSSH Authentication Agent in the list and double click on it;
  • In the OpenSSH Authentication Agent Properties window that appears, choose Automatic from the Startup type: dropdown and click Start from Service status:. Make sure it now says Service status: Running.
  1. Configure Git to use the Windows 10 implementation of OpenSSH by issuing the following command in Powershell:
git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
  1. Configure SSH to automatically add the keys to the agent on startup by editing the config file found at $HOME\.ssh\config (full path - C:\Users\%YOUR_USERNAME%\.ssh\config), and add the following lines:
Host *
	AddKeysToAgent yes
	IdentitiesOnly yes

You can also add the following lines if you generated an SSH key with custom name or multiple SSH keys:

Host github.com
	HostName github.com
	User your_user_name
	IdentityFile ~/.ssh/your_file_name
  1. Add your SSH key to the ssh-agent by issuing the ssh-add command and entering your passphrase:
ssh-add $HOME/.ssh/your_file_name
  1. Done! Now restart your Powershell and even Windows if necessary.

If this was useful, you can buy me a coffee here. Thank you!

Copy link

ghost commented Apr 27, 2022

Thanks everybody in the comments and @danieldogeanu for starting this all.

@danieldogeanu
Copy link
Author

@kirill-lappo-dgt Thanks for all the coffee! I wasn't planning on sleeping the next few weeks anyway! 😂

@Molter
Copy link

Molter commented Apr 29, 2022

I was receiving the following error about the MAC input:

Corrupted MAC on input.
ssh_dispatch_run_fatal: Connection to 1.2.3.4 port 22: message authentication code incorrect
fatal: Could not read from remote repository.

I found two ways to solve it:

1 - add the MAC to git config, the downside is that it forces all of the connections to use the same MAC algorithm.

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe -m hmac-sha2-256"

2 - add the MAC algorithms in the SSH config, this ties the host to the algorithm (replace host.com by your host e.g. gitlab.com)

Host *
	HostName host.com
	IdentityFile ~/.ssh/id_rsa
	MACs hmac-sha2-256

@danieldogeanu
Copy link
Author

@Molter I've never encountered this sort of problem, but thanks for posting the solution here!

@dariopnc
Copy link

dariopnc commented May 6, 2022

Hi, for anyone stumbling here, I had another weird issue: even though ssh-agent was running, when executing ssh-add it was always replying with error fetching identities: communication with agent failed. This was solved by connecting my work computer with its domain, via VPN.

Some other examples of this behaviour are reported here: PowerShell/Win32-OpenSSH#1133 (comment)

@danieldogeanu
Copy link
Author

@dariopnc Thanks for the heads up! It does kinda make sense for the ssh-agent to not work without it being connected to the domain.

@issam-seghir
Copy link

i can't find any config file in the ~/.ssh folder !!

@danieldogeanu
Copy link
Author

@issam-seghir You have to create it manually, it's not there by default.

@tduongtad1304
Copy link

tduongtad1304 commented Feb 10, 2023

Thanks for sharing @danieldogeanu! I researched all around the Internet and was almost fed up with some temporary solutions until I found this gist.

@danieldogeanu
Copy link
Author

@tduongtad1304 You're welcome! Glad I could help!

@DJviolin
Copy link

If you installed git with git for Windows and you use git command natively in your CMD, Powershell, Terminal, you should create GIT_SSH environmental variable which pointing for the result of the where ssh command, for example: c:\Windows\System32\OpenSSH\ssh.exe. After this, git not asking for passphrase.

Source: https://stackoverflow.com/questions/18683092/how-to-run-ssh-add-on-windows

@danieldogeanu
Copy link
Author

@DJviolin Oh, nice! I didn't know you could do that. Thanks for the tip! But you still have to turn on OpenSSH Authentication Agent from Windows Services, as it's not turned on by default. And a config file is still required if you have multiple SSH keys of different types. I personally have different keys for each server or service.

@DJviolin
Copy link

Yes, sorry, I didn't mentoined it, all those steps are still neccessary. This is for edge cases where git still asking for passphrase.

@d-wojciechowski
Copy link

For people who struggle with the ssh-add command, please follow this StackOverflow thread:
https://stackoverflow.com/questions/18683092/how-to-run-ssh-add-on-windows

TLDR: enable "OpenSSH Authentication Agent" and start it, to make ssh-add work.

@SonGokussj4
Copy link

For whatever reason, all this did not help me until I also put the public key file into ~/.ssh/. With only the private key, it continued to prompt me for the keyphrase. Still, thanks for the writeup!

WOW this was IT!!!

@ThomasFrans
Copy link

Thanks for this gist. Somehow this was the only working thing I could find. Even GitHub's documentation has a terrible guide that doesn't work.

@danieldogeanu
Copy link
Author

@ThomasFrans I'm glad I could help! Yeah, I know, that's why I created this gist, I like things to work as smoothly as possible!

@deotimedev
Copy link

only thing that worked, thanks a ton

@anton-x-t
Copy link

anton-x-t commented Apr 18, 2024

Thank you! @danieldogeanu and @XanderXAJ This helped me! It's working!

In addition to the initial Gist, I also had to do this:

# In Admin PowerShell
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

@simkin
Copy link

simkin commented Jun 20, 2024

For whatever reason, all this did not help me until I also put the public key file into ~/.ssh/. With only the private key, it continued to prompt me for the keyphrase. Still, thanks for the writeup!

WOW this was IT!!!

O my! It took me a year to figure this out! Why is this not common knowledge!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment