[英]How do I write a bash script to automate setting up ufw rules using 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 規則?
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 運算符( \\|
和\\&\\&
,甚至\\(
、 \\{
、 \\;
等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.