Shell脚本wget从S3下载 - 禁止错误

时间:2014-06-26 07:44:24

标签: linux shell amazon-s3 wget

我正在尝试使用shell脚本和命令wget从 Amazon S3下载文件。 cuestion中的文件具有公共权限,我可以使用标准浏览器下载它。到目前为止,这是我在剧本中的内容:

wget --no-check-certificate -P /tmp/soDownloads  https://s3-eu-west-1.amazonaws.com/myBucket/myFolder/myFile.so
cp /tmp/soDownloads/myFile.so /home/hadoop/lib/native

问题对我来说有点奇怪。虽然我可以直接从终端下载文件(只需输入wget命令),但当我尝试执行包含相同命令行的shell脚本时会弹出错误(脚本使用> sh myScript运行.SH )。

--2014-06-26 07:33:57--  https://s3-eu-west-1.amazonaws.com/myBucket/myFolder/myFile.so%0D
Resolving s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)... XX.XXX.XX.XX
Connecting to s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)|XX.XXX.XX.XX|:443... connected.
WARNING: cannot verify s3-eu-west-1.amazonaws.com's certificate, issued by     ‘/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3’:
Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 403 Forbidden
2014-06-26 07:33:57 ERROR 403: Forbidden.

现在,我知道这可能只是我身边的一个乞丐错误,但我无法检测到任何类型的任何拼写错误或错误。我很感激你能帮我解决这个问题。

作为一个说明,我想注意我在亚马逊的 弹性MapReduce 框架提供的EC2实例中运行该脚本,如果有的话与此问题有关。

1 个答案:

答案 0 :(得分:1)

我怀疑你用来编写该脚本的编辑器给你留下了一点“礼物”。

命令行不一样。仔细看看:

--2014-06-26 07:33:57-- ... myFolder/myFile.so%0D
                                              ^^^ what's this about?

这是ASCII CR的urlencoding,十进制13十六进制0x0D。脚本中有一个嵌入式回车符,不应该存在,wget将其视为URL中的最后一个字符,并将其发送到S3。

使用less实用程序查看文件或vi之类的编辑器,这个迷路角色可能会显示为^M ...或者,如果它们全部都在文件,当你用vi打开它时,你应该在屏幕底部看到这个:

"foo" [dos] 1L, 5C    
      ^^^^^

如果你看到了,那就在vi里面......

:set ff=unix[enter] 
:x[enter]

...将转换行结尾,并将文件保存为可用的格式,如果这确实是您遇到的问题。

如果您正在编辑Windows上的文件,您将需要使用一个编辑器,该编辑器了解如何使用换行符保存文件,而不是回车。