Wget脚本并运行它


Answers:


51

小心

在运行脚本之前,您是否信任编写该脚本的人?

例如,您是否希望脚本包含此内容?

echo "brain1" > /etc/hostname

那将尝试更改您的主机名。


供以后参考,如果在验证脚本正确并且没有恶意之后,可以像这样在一行中运行它:

wget -O - http://dl.dropbox.com/u/11210438/flockonus-stack.sh | bash

但是,请先单独下载并阅读,然后再首次运行。

另请注意,使用此方法可能无法正常运行已下载脚本中的交互式提示。


9
+1指出与此相关的(重大)安全问题。绝对确定您信任来源。那echo "brain1" > /etc/hostname很容易做到rm -rf /
Christopher Cashell

2
+1谢谢大家,这个脚本是我写的,很安全。
法比亚诺·索里亚尼

1
你的apt-get install台词?如果apt-get将安装任何其他依赖项,它将询问您,如果不能安装,它将退出以确保安全。您可以将所有从属程序包添加到命令行参数,也可以考虑添加-y,例如apt-get -y install...
Mikel

这个问题与依赖无关,它与apt flush stdin有关。
Zoredache

1
实际上,即使您由于中间攻击而“信任源”,您实际上也不信任源。就是说,带有bash脚本的随机私有url应该是一个狭窄的攻击媒介,没有人能够将其剥离。
SpamapS 2011年

9

非交互式脚本

wget -O - http://website.com/my-script.sh | bash

请注意,使用此方法时,交互式脚本将不起作用。


互动脚本

为了使交互式脚本正常工作,您可以使用以下命令:

bash <(wget -qO- http://website.com/my-script.sh)

需要以超级用户身份运行的交互式脚本

警告:这非常危险。不建议。

sudo su -c "bash <(wget -qO- http://website.com/my-script.sh)" root

请注意,您不能简单地使用它,sudo bash因为使用<(...)将创建一个虚拟文件,并且不能从root bash实例访问它的文件描述符。它必须在需要读取虚拟文件的同一用户上执行,因此必须以其自己的命令在root用户外壳中发送。


1
这是最好的答案。它涵盖了交互执行,非交互执行和特权执行的重要方面。
Leonid Makarov

5

该脚本是从我这里来的,它很安全。。喜欢单线脚本,但是,它有一些没有运行的交互式代码。

当apt-get调用dpkg运行时,它将刷新stdin。如果使用的命令是curl blah | bash,则基本上是通过STDIN将页面内容发送到bash。如果您的命令之一是apt-get,然后运行,则其他所有命令都会被刷新。

诀窍是使用这样的命令apt-get install --yes denyhosts </dev/null。这为apt-get提供了不同的输入,并且只刷新了/ dev / null而不是脚本的其余部分。

如果要查看通过远程脚本安装某些内容的完整示例,则可能需要查看此脚本来设置denyhosts

出于记录目的,为此,我更喜欢使用curl而不是wget,但是wget也应该很好。


我尝试了一个带有一些互动功能的虚拟脚本,它很有效。.我没明白xD dl.dropbox.com/u/11210438/lala.sh
Fabiano Soriani 2011年

4
#!/bin/sh
if [ ! -f "/tmp/flockonus-stack.sh" ]
then
    wget -O /tmp/flockonus-stack.sh http://dl.dropbox.com/u/11210438/flockonus-stack.sh
fi

sh /tmp/flockonus-stack.sh

4

所有这些示例都遗漏了相当重要的一点。如果使用url http://dl.dropbox.com/u/11210438/flockonus-stack.sh,则每次下载时都需要审核脚本,因为您和保管箱之间的网络路径上的任何人都可以修改该脚本。如果切换到HTTP 小号://dl.dropbox.com/u/11210438/flockonus-stack.sh,你不会有不安全的该源。

(Dropbox尝试将http URL重定向到https,但是在发生网络攻击的情况下,wget将永远无法与真正的Dropbox对话,也永远不会看到重定向)


2
这可能最好是对问题的评论,而不是答案,因为它不能完全回答问题。仍然值得指出!
比尔·魏斯

2

尝试简单地按照您在wget中指定的方式下载它,然后直接执行它。您可以看中并为要下载的脚本使用变量等,但这可以解决问题。

例如:

!#/bin/bash

#Change to temp directory
cd /tmp

#Download file using wget
wget http://dl.dropbox.com/u/11210438/flockonus-stack.sh

#Execute the file

sh flockonus-stack.sh

我如何告诉我的系统在启动时实际执行此操作?
Metallkiller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.