当前位置: 首页 > 知识库问答 >
问题:

SCP 失败并显示“协议错误:文件名与请求不匹配”

陆啸
2023-03-14

我有一个脚本,它使用 SCP 从 AWS 上的远程 Linux 主机中提取文件。在每晚运行相同的代码大约 6 个月而没有问题后,它今天开始失败,并出现协议错误:文件名与请求不匹配。我在下面的一些更简单的文件名上重现了这个问题:

$ scp -i $IDENT $HOST_AND_DIR/"foobar" .
# the file is copied successfully

$ scp -i $IDENT $HOST_AND_DIR/"'foobar'" .
protocol error: filename does not match request
# used to work, i swear...

$ scp -i $IDENT $HOST_AND_DIR/"'foobarbaz'" .
scp: /home/user_redacted/foobarbaz: No such file or directory
# less surprising...

我用单引号的原因是,我在抓取一个最初名称中带有空格的文件。为了处理这些空间,我已经做了几个月的$HOST_AND_DIR/“'forbar'”,但从今天开始,它只接受$COST_AND_DIR/”foo\bar“。所以,我的问题已经解决了,但我仍然很好奇到底发生了什么。

我在谷歌上搜索了错误信息,但是我没有看到任何真正提到它的地方,这让我很惊讶。

涉及的两个主机都有OpenSSL 1.0.2gssh-vlocalhost的输出中,bash--versionGNU bash,版本4.3.48(1)-发布(x86_64-pc-linux-gnu)有什么想法吗?

共有2个答案

薛承基
2023-03-14

在我的例子中,文件名中有[]个字符,需要使用此处列出的选项之一进行转义。例如:

scp USERNAME@IP_ADDR:"/tmp/foo\[bar\].txt" /tmp
袁晟
2023-03-14

我最终浏览了源代码,并找到了引发此错误的提交:

GitHub提交

远程-

这种检查为防止恶意服务器发送意外文件名提供了一些保护,但由于客户端和服务器通配符扩展规则之间的差异,它存在拒绝所需文件的风险。

因此,这还会添加新的 -T 标志以禁用检查。

他们添加了一个新的标志-T,它将忽略他们添加的这个新检查,因此它是向后兼容的。但是,我想我们应该看看并找出为什么我们使用的文件名被标记为受限。

 类似资料:
  • 我在谷歌上搜索了这个错误信息,但我没有看到任何关于它的真正提及,这让我很惊讶。 所涉及的两台主机在的输出中都有和表示有什么想法吗?

  • 问题内容: 我正在使用React Native开发一个简单的应用程序。我正在Android设备上对其进行测试。我创建了一个Node.js服务器来监听请求,该服务器运行在http:// localhost:3333 /上 。接下来,我要从index.android.js进行提取请求。下面是代码。 节点服务器上请求处理程序的代码如下 但是,获取请求无效。我在Chrome控制台中收到的错误是:TypeE

  • 我正在开发一个脚本,以访问图形API阅读我们的广告中的所有用户。我正在通过以下方式使用AXIOS执行一个请求: 然而,这失败了,因为: client_id=535FB089-9FF3-47B6-9BFB-4F1264799865&scope=https%3a%2f%2fgraph.microsoft.com%2f.default&client_secret=qwgdyamab0yskul1qkv5

  • 如何让在其输出中的匹配行之前显示文件名?

  • 所以我已经研究了好几个小时,尝试了不同的东西,研究了好几个小时都没有结果。调用是在提供user和pass之后获取JWT令牌。 当它到达服务器时,morgan看到有一个请求,但我得到的状态是400。这是我的路线 我很难理解护照是怎么回事。authenticate('localAuth')起作用,因此这是我的策略文件,以备需要 更新:我在检查fiddler上的请求时遇到了某种错误。 ~标题~:132

  • 我正在从事一个使用Java、C#和C应用程序的项目。为了在他们之间进行通信,我尝试使用Google协议缓冲区。我正在使用以下命令。原型文件,取自示例: 我指的是以下教程:https://developers.google.com/protocol-buffers/docs/csharptutorial 其他语言的教程也在那里。 我为每种语言尝试了以下命令行参数: Java: C:\ProtoBuf