You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Linux向Windows用scp传文件报错:'C:\Program'未被识别

为啥会报这个错?

这个报错的根子在于Windows上OpenSSH的scp程序路径带空格,而Windows的shell处理这类路径时没加引号,直接把路径拆碎了。

具体说:你装的OpenSSH默认路径是C:\Program Files\OpenSSH\,scp.exe的完整路径就是C:\Program Files\OpenSSH\scp.exe。当你从Linux跑scp命令传文件时,Windows的sshd服务会调用本地的scp来接收,但它直接用了没加引号的路径——Windows的cmd/powershell看到空格就会把路径切成C:\Program和后面的部分,自然就认不出这个“命令”了,于是就弹出那个报错。

不用额外工具的解决办法

给你几个纯靠原生OpenSSH就能搞定的方案,适合自动化脚本场景:

方案1:改Windows注册表,让sshd用带引号的scp路径(一劳永逸)

这是最适合自动化的方案,改一次就不用管了:

  • 按Win+R输入regedit打开注册表编辑器。
  • 找到路径:HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH。
  • 右键OpenSSH项,新建「字符串值」,命名为scp。
  • 把数值数据改成带双引号的完整路径:"C:\Program Files\OpenSSH\scp.exe"。
  • 打开PowerShell,执行Restart-Service sshd重启OpenSSH服务。
    之后再传文件就不会有这个问题了。

方案2:Linux端scp命令加参数指定路径(临时应急)

如果不想碰注册表,每次执行scp时可以用-S参数指定Windows侧的scp路径,注意要转义引号:

scp -S '"C:\Program Files\OpenSSH\scp.exe"' fileNameA user@windowServer:fileNameA

不过这个每次都要加参数,脚本里写起来有点麻烦,还是方案1更省心。

方案3:重装OpenSSH到无空格路径(可选)

如果允许重装的话,把OpenSSH装到C:\OpenSSH\这种没有空格的路径里,默认路径就不会触发这个问题,不用额外配置。

内容的提问来源于stack exchange,提问作者student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:48:20