Packer

如何在打包程序外殼配置程序中提供 sudo pwd

  • March 6, 2022

我想使用打包程序創建一個 AWS AMI。設置過程的一部分是執行建構腳本,該腳本將為非 root 的系統使用者 averagejoe 設置服務和配置環境。安裝腳本基本上如下所示:

# some cmds that need to be run by averagejoe
echo "alias ll='ls -Alfh'" > $HOME/.bashrc
# some cmds that need to be run by a privileged user
sudo firewall-cmd --zone=public --permanent --add-port=3389/tcp

因此,部分腳本應以系統使用者 averagejoe 執行,部分腳本應以特權使用者使用 sudo 執行。因此,不能按照此處的建議以特權使用者身份執行整個腳本。

當打包程序配置程序執行腳本時,如何提供 sudo pwd?我想到了一個 3 階段的方法,首先將 sudo 重新配置為不需要密碼,然後執行設置腳本,然後將 sudo 重置為請求密碼,但是還有什麼更優雅的嗎?

我最終在執行設置腳本時關閉了 sudo 密碼,如下所示:

   "provisioners": [
   {
       "type": "shell",
       "script": "project/packer/pwd_less_sudo.sh",
       "execute_command": "echo {{user `password`}} | sudo -S bash -c '{{ .Path }}'"
   },
   {
       "type": "shell",
       "script": "project/scripts/bootstrap.sh",
       "execute_command": "{{ .Path }}  --branch feature/ods-devenv"
   },
   {
       "type": "shell",
       "script": "project/packer/pwd_sudo.sh",
       "execute_command": "echo {{user `password`}} | sudo -S bash -c '{{ .Path }}'"
   }
]

pwd_less_sudo.sh 在哪裡

#!/usr/bin/env bash
# make wheel pwd free
sudo sed -i '0,/%wheel[[:space:]]*ALL=(ALL)[[:space:]]*ALL/{s||%wheel        ALL=(ALL)       NOPASSWD: ALL|}' /etc/sudoers

而 pwd_sudo.sh 是

#!/usr/bin/env bash
# give wheel their pwd back
sudo sed -i '0,/%wheel[[:space:]]*ALL=(ALL)[[:space:]]*NOPASSWD:[[:space:]]*ALL/{s||%wheel  ALL=(ALL)       ALL|}' /etc/sudoers

引用自:https://serverfault.com/questions/1022878