我想从以下位置下载脚本: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 对话,也永远不会看到重定向)