<p dir="auto">Hi, I am trying to use addprocs  to connect to remote workers on Windows. SSH connection is successful, but Julia cannot excecute commands.</p>
<p dir="auto">I think it is not the problem of Julia on remote machines, because I got the same error even remote Julia is uninstalled.  SSH is good, because it can work on cmd.exe.</p>
<p dir="auto">Here are the errors:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="root@192.168.1.106's password: [Here I input password]
        From failed worker startup:     Unable to execute command or shell on remote system: Failed to Execute process.
ERROR: Unable to read host:port string from worker. Launch command exited with error?
error(::String) at .\error.jl:33
read_worker_host_port(::Pipe) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:273
connect(::Distributed.SSHManager, ::Int64, ::WorkerConfig) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\managers.jl:397
create_worker(::Distributed.SSHManager, ::WorkerConfig) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:505
setup_launched_worker(::Distributed.SSHManager, ::WorkerConfig, ::Array{Int64,1}) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:451
(::getfield(Distributed, Symbol(&quot;##47#50&quot;)){Distributed.SSHManager,WorkerConfig})() at .\task.jl:259
Stacktrace:
 [1] sync_end(::Array{Any,1}) at .\task.jl:226
 [2] #addprocs_locked#44(::Base.Iterators.Pairs{Symbol,Any,Tuple{Symbol,Symbol,Symbol},NamedTuple{(:tunnel, :sshflags, :max_parallel),Tuple{Bool,Cmd,Int64}}}, ::Function, ::Distributed.SSHManager) at .\task.jl:266
 [3] #addprocs_locked at .\none:0 [inlined]
 [4] #addprocs#43(::Base.Iterators.Pairs{Symbol,Any,Tuple{Symbol,Symbol,Symbol},NamedTuple{(:tunnel, :sshflags, :max_parallel),Tuple{Bool,Cmd,Int64}}}, ::Function, ::Distributed.SSHManager) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:369
 [5] #addprocs at .\none:0 [inlined]
 [6] #addprocs#251(::Bool, ::Cmd, ::Int64, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Array{String,1}) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\managers.jl:118
 [7] addprocs(::Array{String,1}) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\managers.jl:117
 [8] top-level scope at none:0"><pre class="notranslate"><code class="notranslate">root@192.168.1.106's password: [Here I input password]
        From failed worker startup:     Unable to execute command or shell on remote system: Failed to Execute process.
ERROR: Unable to read host:port string from worker. Launch command exited with error?
error(::String) at .\error.jl:33
read_worker_host_port(::Pipe) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:273
connect(::Distributed.SSHManager, ::Int64, ::WorkerConfig) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\managers.jl:397
create_worker(::Distributed.SSHManager, ::WorkerConfig) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:505
setup_launched_worker(::Distributed.SSHManager, ::WorkerConfig, ::Array{Int64,1}) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:451
(::getfield(Distributed, Symbol("##47#50")){Distributed.SSHManager,WorkerConfig})() at .\task.jl:259
Stacktrace:
 [1] sync_end(::Array{Any,1}) at .\task.jl:226
 [2] #addprocs_locked#44(::Base.Iterators.Pairs{Symbol,Any,Tuple{Symbol,Symbol,Symbol},NamedTuple{(:tunnel, :sshflags, :max_parallel),Tuple{Bool,Cmd,Int64}}}, ::Function, ::Distributed.SSHManager) at .\task.jl:266
 [3] #addprocs_locked at .\none:0 [inlined]
 [4] #addprocs#43(::Base.Iterators.Pairs{Symbol,Any,Tuple{Symbol,Symbol,Symbol},NamedTuple{(:tunnel, :sshflags, :max_parallel),Tuple{Bool,Cmd,Int64}}}, ::Function, ::Distributed.SSHManager) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\cluster.jl:369
 [5] #addprocs at .\none:0 [inlined]
 [6] #addprocs#251(::Bool, ::Cmd, ::Int64, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Array{String,1}) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\managers.jl:118
 [7] addprocs(::Array{String,1}) at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.0\Distributed\src\managers.jl:117
 [8] top-level scope at none:0
</code></pre></div>
<p dir="auto">Windows 10 now has facilities for <a href="https://www.howtogeek.com/336775/how-to-enable-and-use-windows-10s-built-in-ssh-commands/" rel="nofollow">native ssh handling</a>, but that uses the native shell and not <code class="notranslate">sh</code> which we currently assume to be available on the remote host.</p>
<p dir="auto">See <a href="https://discourse.julialang.org/t/cant-add-windows-workers-due-to-a-missing-sh-shell/15055?u=vchuravy" rel="nofollow">https://discourse.julialang.org/t/cant-add-windows-workers-due-to-a-missing-sh-shell/15055?u=vchuravy</a> for where this came up.</p>