使用 Ansible 自動化 Linux 設定
在現代 IT 基礎設施管理中,手動配置伺服器不僅效率低落,更容易因人为疏失導致環境不一致。隨著伺服器規模擴大,自動化配置工具如 Ansible 成為 DevOps 工程師的必備技能。Ansible 以其「無代理(Agentless)」架構和基於 SSH 的連接方式,讓設定管理變得簡單直觀。本文將帶領中階 Linux 使用者,從零開始建立第一個 Ansible 自動化環境。
環境準備與安裝
Ansible 的核心優勢在於控制器節點(Control Node)無需在被管節點(Managed Node)上安裝任何軟體。我們只需在控制器節點上安裝 Ansible 套件即可。以下指令適用於 Ubuntu 22.04 和 Debian 12 系統。
首先,更新套件索引並安裝 Ansible。由於 Ansible 主要使用 Python 開發,我們同時安裝 python3-pip 以確保依賴關係完整:
sudo apt update
sudo apt install -y ansible python3-pip
安裝完成後,可以使用 ansible --version 確認版本資訊,確保安裝成功。
設定無密碼 SSH 登入
Ansible 透過 SSH 協議與被管節點通訊,因此金鑰驗證是自動化流程的關鍵。我們需要在控制器節點生成 SSH 金鑰,並將公鑰複製到所有被管節點。
假設我們的控制器節點 IP 為 192.168.1.10,而被管節點為 192.168.1.20 和 192.168.1.21。在控制器節點執行以下指令生成金鑰對(若已有金鑰可跳過此步):
ssh-keygen -t ed25519 -N "" -f ~/.ssh/ansible_key
接著,將公鑰複製到被管節點。請將 user 替換為你的實際使用者名稱:
ssh-copy-id -i ~/.ssh/ansible_key.pub user@192.168.1.20
ssh-copy-id -i ~/.ssh/ansible_key.pub user@192.168.1.21
為了讓 Ansible 使用特定金鑰,建議在 ~/.ssh/config 中設定 Host Alias,或直接使用 -i 參數指定金鑰路徑。
定義主機清單(Inventory)
Ansible 需要知道要管理哪些伺服器。我們建立一個名為 inventory 的檔案來定義主機清單。
mkdir ~/ansible-project
cd ~/ansible-project
nano inventory
在 inventory 檔案中,我們定義一個名為 webservers 的主機群組:
[webservers]
192.168.1.20
192.168.1.21
執行第一個 Playbook
Playbook 是 Ansible 的配置文件,使用 YAML 格式描述期望的狀態。我們將撰寫一個簡單的 Playbook,用於在所有 Web 伺服器上安裝 Nginx 並啟動服務。
建立 site.yml 檔案:
nano site.yml
內容如下:
---
- name: Configure Web Servers
hosts: webservers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Start and Enable Nginx
service:
name: nginx
state: started
enabled: yes
這裡的 become: yes 表示任務將以 root 權限執行。tasks 區塊定義了具體的操作步驟。
現在,我們可以執行這個 Playbook。請務必指定金鑰路徑和主機清單:
ansible-playbook -i inventory -u user -i ~/.ssh/ansible_key site.yml
執行後,Ansible 會連線至指定的主機,安裝 Nginx 並確保服務處於啟動狀態。若一切順利,你將看到類似 changed: [192.168.1.20] 的輸出,表示設定已套用。
常見問題與解決方案
1. SSH 連線被拒絕或超時 這是新手最常遇到的問題。請檢查以下幾點:
- 確認控制器節點能 ping 通被管節點。
- 確認被管節點的 SSH 服務正在運行,且防火牆(如 UFW 或 iptables)允許 SSH 連線(通常為 port 22)。
- 檢查 SSH 金鑰權限。私鑰檔案權限應設為
600:chmod 600 ~/.ssh/ansible_key。
2. Playbook 執行失敗,提示 "module not found"
這通常發生在 Python 環境不一致時。Ansible 依賴於控制器節點的 Python 環境。若使用虛擬環境,請確保在執行 ansible-playbook 時,虛擬環境已啟用。此外,某些模組可能需要額外的 Python 套件,可嘗試安裝 python3-apt 等依賴套件。
小結
透過本文的教學,我們已經完成了 Ansible 的基本安裝、SSH 金鑰配置、主機清單定義,並成功執行了一個安裝 Nginx 的 Playbook。Ansible 的威力在於其模組化的設計,你可以輕鬆擴充更多任務,如建立使用者、設定防火牆規則或部署應用程式。建議下一步嘗試學習使用 roles 來組織複雜的 Playbook,並結合版本控制系統(如 Git)來追蹤設定變更,從而建立穩健的自動化基礎設施。