Windows下SSH/SCP连接AWS托管实例报错CreateProcessW error:2求助
你遇到的问题核心在于Windows命令提示符(CMD)没有默认的sh shell环境,而你.ssh/config里的ProxyCommand用了sh -c来执行AWS SSM命令,这就导致Windows系统找不到sh命令,出现CreateProcessW failed error:2的报错。而WSL是Linux子系统,自带完整的Linux shell环境,所以能正常解析这个命令。
下面给你几个可行的解决方案:
1. 修改.ssh/config适配Windows环境
把ProxyCommand改成Windows能识别的命令格式,比如用PowerShell来执行:
host i-* mi-* ProxyCommand powershell.exe -Command "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"
如果你的系统里装了Git Bash这类带sh的工具,也可以指定sh的完整路径,比如:
host i-* mi-* ProxyCommand "C:\Program Files\Git\bin\sh.exe" -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"
2. 使用支持Linux shell的Windows终端
直接切换到Git Bash、Windows Terminal(搭配WSL标签页)或者PowerShell Core这类终端环境,它们自带兼容Linux的shell,你原来的.ssh/config配置不用修改就能直接生效。
3. 确认Windows环境下AWS CLI的可用性
虽然你能通过aws ssm start-session启动会话,但还是要检查一下Windows的CMD/PowerShell里能不能正常执行aws --version,确保AWS CLI已经添加到系统PATH中。如果PATH没配置好,也可能间接导致ProxyCommand执行失败。
简单总结一下:WSL能跑是因为它是Linux环境,而Windows原生CMD/PowerShell不认识sh命令,只要把ProxyCommand改成Windows能解析的形式,或者换个支持Linux shell的终端,问题就能解决。
内容的提问来源于stack exchange,提问作者Jass

