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

时间:2017-10-09 17:39:29

标签: bash docker docker-machine

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

echo "======> setting up firewall rules for $1 ..."   
docker-machine ssh $1 \
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命令后的日志信息说"跳过添加现有规则"尽管这是一个全新的例子。我能够手动ssh到Docker机器实例并运行相同的命令,没有任何问题。如何编写bash脚本以使用docker-machine自动设置ufw规则?

1 个答案:

答案 0 :(得分:1)

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

但是,在您的示例中, shell运算符(如|&&优先),即它们终止docker-machine ssh收到的命令/参数列表

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

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

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