我有一个脚本使用SCP从AWS上的远程Linux主机上提取文件.在每晚运行相同的代码大约6个月没有问题之后,它今天开始失败了protocol error: filename does not match request.我在下面的一些更简单的文件名中重现了这个问题:
$ 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...
Run Code Online (Sandbox Code Playgroud)
我单引号的原因是我最初抓住了名字中带有空格的文件.为了处理空间,我已经做$HOST_AND_DIR/"'foo bar'"了好几个月,但从今天开始,它只会接受$HOST_AND_DIR/"foo\ bar".所以,我的问题是固定的,但我仍然对正在发生的事情感到好奇.
我用Google搜索了错误信息,但我没有看到任何真实的提及,这让我感到惊讶.
所涉及的两个主机都有OpenSSL 1.0.2g输出ssh -v localhost,并bash --version说GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
任何想法?
JBo*_*ond 26
我最后查看了源代码并找到了抛出此错误的提交:
remote->本地目录副本满足用户指定的通配符.
此检查可以防止恶意服务器发送意外的文件名,但由于客户端和服务器通配符扩展规则之间存在差异,因此存在拒绝所需文件的风险.
因此,这还会添加一个新的-T标志来禁用检查.
他们添加了一个新标志-T,忽略了他们添加的新检查,因此它向后兼容.但是,我想我们应该查看并找出为什么我们使用的文件名被标记为受限制.
| 归档时间: |
|
| 查看次数: |
2975 次 |
| 最近记录: |