windows 10 ssh proxycommand: "posix_spawn: No such file or directory"

I use Windows10 and I need to use a jumphost to get to my Linux servers. Thus I have configured my .ssh\config like so:

Host jumphost
HostName jumphost.server.local

Host server*.server.local
ProxyCommand  ssh jumphost netcat -w 120 %h %p

But when I run ssh server01.server.local -v (dash-v for verbose) I get the following error:

OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\admin/.ssh/config
debug1: C:\\Users\\admin/ssh/config line 70: Applying options for server*.server.local
debug1: Executing proxy command: exec ssh jumphost netcat -w 120 server01.server.local 22
CreateProcessW failed error:2
posix_spawn: No such file or directory

As per this bug, the fix is to use a full path. So this is the correct line in the .ssh/config:

  ProxyCommand  C:\Windows\System32\OpenSSH\ssh.exe jumphost netcat -w 120 %h %p

For further development see this issue: https://github.com/microsoft/vscode-remote-release/issues/18


TL;DR

The ProxyCommand should invoke ssh with .exe extension, for example:

ProxyCommand ssh.exe -q -W %h:%p yyy

The long(?) story

Running ssh -vvv XXX shows:

debug3: spawning "C:\\Windows\\System32\\OpenSSH\\ssh -q -W XXX:22 YYY"
CreateProcessW failed error:2
posix_spawn: No such file or directory

According to CreateProcess document on MSDN, I guess posix_spawn is calling CreateProcess in a way that lpApplicationName argument must be exact and absolute path. After specifying the .exe suffix, it seems to be fixed.


I got same error but it was because of DISPLAY environment variable set to some value. Once you unset that environment variable, the error went away.


This issue has to do with a bug in the OpenSSH Windows implementaiton. This bug is fixed with release 8.1.0.0. Detailed instructions on how to patch the version can be found here