如何编写一个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运算符( \|
和\&\&
,甚至\(
, \{
, \;
等)。