使用 Ansible 自動化 Linux 設定 文章首圖

使用 Ansible 自動化 Linux 設定

使用 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.20192.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 金鑰權限。私鑰檔案權限應設為 600chmod 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)來追蹤設定變更,從而建立穩健的自動化基礎設施。