如何编写 bash 脚本以使用 docker-machine 自动设置 ufw 规则?

How do I write a bash script to automate setting up ufw rules using docker-machine?

我有一个 shell 脚本,如下所示:

echo "======> setting up firewall rules for  ..."   
docker-machine ssh  \
echo "y" | sudo ufw --force enable \
&& sudo ufw default deny incoming \
&& sudo ufw allow 22/tcp \
&& sudo ufw allow 2376/tcp \
&& sudo ufw allow 2377/tcp \
&& sudo ufw allow 7946/tcp \
&& sudo ufw allow 7946/udp \
&& sudo ufw allow 4789/udp \
&& sudo ufw reload \
&& sudo systemctl restart docker

每个 ufw 命令 运行 后的日志记录信息显示 "Skipping adding existing rule" 即使这是一个全新的实例。我可以手动 ssh 进入 Docker 机器实例和 运行 相同的命令,没有任何问题。如何编写 bash 脚本以使用 docker-machine 自动设置 ufw 规则?

docker-machine ssh 命令的行为类似于标准 ssh 命令,即它接受远程 运行 的命令。

但是,在您的示例中,shell 运算符(例如 |&& 优先 ,即它们终止 [= docker-machine ssh 收到的 33=]。

解决此问题的一种方法是引用您希望 docker-machine ssh 接收的命令列表,例如:

$ docker-machine ssh  \
'echo "y" | sudo ufw --force enable \
&& sudo ufw default deny incoming \
&& sudo ufw allow 22/tcp ... '

另一种选择是转义所有 shell 运算符(\|\&\&,甚至 \(\{\; 等).