Moving from Windows 1809's OpenSSH to OpenSSH Portable
I'm using Git for Windows and have configured the git client to use a custom ssh command via core.sshCommand
to look for the ssh binary that has been installed as part of Windows 10's 1809's Optional Feature this has been working well but recently when I'm trying to use git against Github as a remote repo (Bitbucket worked fine) it has been giving me warning messages
warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
After performing the obligatory google search, I stumbled across several threads but still couldn't find a solution. This annoyed me enough to look for other alternatives and discovered a Windows port of OpenSSH Portable. So since I didn't want (probably not even possible) to have both binaries (and ssh-agents) running side by side. I decided it would be best that I remove Window's 1809's installed version first then install OpenSSH Portable
Uninstall Windows' OpenSSH
This basically removes the binaries installed in C:\Windows\System32\OpenSSH
Remove-WindowsCapability -Online -Name "OpenSSH.Client~~~~0.0.1.0"
Remove-WindowsCapability -Online -Name "OpenSSH.Server~~~~0.0.1.0"
Stop and delete the existing Windows Service
Get-Service ssh-agent | Stop-Service
sc.exe delete ssh-agent
Install OpenSSH Portable
I'm using Chocolatey's openssh package but you can download and install the binaries yourself here. This installs the binaries into C:\Program Files\OpenSSH-Win64
. The /SSHAgentFeature
flag ensures that the SSH Agent Service gets installed too.
choco install openssh --package-parameters="/SSHAgentFeature"
Note version 7.9.0.1
was the last good working version for me. 8.0.0.1
was complaining about my ssh key being in an invalid format.
Check that you have the binaries installed
Get-Command ssh*exe
CommandType Name Version Source
----------- ---- ------- ------
Application ssh.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\ssh.exe
Application ssh-add.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\ssh-add.exe
Application ssh-agent.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\ssh-agent.exe
Application sshd.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\sshd.exe
Application ssh-keygen.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\ssh-keygen.exe
Application ssh-keyscan.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\ssh-keyscan.exe
Application ssh-shellhost.exe 7.9.0.0 C:\Program Files\OpenSSH-Win64\ssh-shellhost.exe
Check that you have the ssh-agent
running
Get-Service ssh-agent
Status Name DisplayName
------ ---- -----------
Running ssh-agent ssh-agent
Configure our git client to use our newly installed binaries for ssh
git config --global core.sshCommand "'C:\Program Files\OpenSSH-Win64\ssh.exe'"
Ensure that it has been configured properly
Get-Content $env:USERPROFILE\.gitconfig | Select-String sshCommand -Context 6
[core]
excludesfile = ~/.gitignore_global
sshCommand = 'C:\\Program Files\\OpenSSH-Win64\\ssh.exe'
I wanted to remove any existing identities (but this could be optional)
ssh-add -D
Add new identites
ssh-add
Then we should be good to go ;)