Wget 脚本并运行它

Wget 脚本并运行它

我想从以下位置下载脚本:http://dl.dropbox.com/u/11210438/flockonus-stack.sh并执行它。我的猜测是,使用 wget 重命名它,chmod 它,然后执行。

在 Ubuntu 上执行该操作的命令是什么?

答案1

小心

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

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

echo "brain1" > /etc/hostname

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


为了将来参考,如果在验证脚本正确且非恶意后,您可以像这样在一行中运行它:

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

但请单独下载并在第一次运行之前阅读。

另请注意,使用此方法,下载的脚本内的交互式提示可能无法正常工作。

答案2

非交互式脚本

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

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


交互式脚本

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

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

需要以 root 身份运行的交互式脚本

警告:此操作极其危险。不建议这么做。

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

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

答案3

该脚本是我写的,很安全。喜欢这行代码,但是,有一些交互行没有运行。不知道为什么?

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

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

如果你想查看通过远程脚本安装某些内容的完整示例,你可能需要查看此脚本设置拒绝主机

顺便说一下,我更喜欢 curl 而不是 wget,但 wget 也应该可以。

答案4

所有这些示例都忽略了一个相当重要的点。如果你使用 url http://dl.dropbox.com/u/11210438/flockonus-stack.sh,则每次下载时都需要审核脚本,因为您和 dropbox 之间的网络路径上的任何人都可以修改它。如果你切换到https: //dl.dropbox.com/u/11210438/flockonus-stack.sh,你就不会再有那种不安全感。

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

相关内容