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

我有一个如下所示的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规则?

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 ... ' 

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