介紹
Ansible是一款現代配置管理工具,可幫助設置和維護遠程服務器的任務。
這個速查表式指南提供了使用 Ansible 時常用的命令和實踐的快速參考。如需了解 Ansible 概述以及如何安裝和配置它,請參閱我們的指南:如何在 Ubuntu 20.04 上安裝和配置 Ansible。
如何使用本指南:
- 本指南以速查表格式提供自包含的命令行片段。
- 跳至與您正在完成的任務相關的任何部分。
- 當您在本指南的命令中看到
突出顯示的文本
時,請記住,這些文本應該是來自您自己清單的主機、用戶名和 IP 地址。
Ansible詞彙表
以下是在本指南中大部分使用的 Ansible 特定術語:
- 控制機器/節點:安裝並配置 Ansible 以連接並在節點上執行命令的系統。
- 節點:由 Ansible 控制的服務器。
- 庫存文件:包含有關 Ansible 控制的伺服器信息的文件,通常位於
/etc/ansible/hosts
。 - Playbook:包含要在遠程伺服器上執行的一系列任務的文件。
- 角色:包含一組 Playbook 和其他與安裝 Web 伺服器等目標相關的文件。
- Play:完整的 Ansible 執行。一個 play 可以有多個 Playbook 和角色,從作為入口點的單個 Playbook 包含。
如果您想了解這些命令在實踐中的示例,請參閱我們關於 如何使用 Ansible 自動化 Ubuntu 20.04 上的初始伺服器設置 的指南。您至少需要一台遠程伺服器作為節點。
測試與節點的連接
要測試 Ansible 是否能夠連接並在節點上運行命令和 Playbook,您可以使用以下命令:
ping
模組將測試您是否具有連接到庫存文件中定義的節點的有效憑據,以及測試 Ansible 是否能夠在遠程伺服器上運行 Python 腳本。一個 pong 回覆表示 Ansible 已準備好在該節點上運行命令和 Playbook。
以不同用户身份连接
默认情况下,Ansible 尝试以当前系统用户身份连接到节点,使用其相应的 SSH 密钥对。要以不同用户身份连接,请在命令后附加 -u
标志和预期用户的名称:
对于 ansible-playbook
也是如此:
使用自定义 SSH 密钥
如果您使用自定义 SSH 密钥连接到远程服务器,您可以在执行时使用 --private-key
选项提供它:
此选项对 ansible-playbook
也适用:
使用基于密码的身份验证
如果您需要使用基于密码的身份验证来连接节点,您需要将选项 --ask-pass
添加到您的 Ansible 命令中。
这将使 Ansible 提示您输入远程服务器上您尝试连接的用户的密码:
這個選項對於ansible-playbook
也是有效的:
提供sudo
密碼
如果遠程用戶需要提供密碼才能運行sudo
命令,您可以在Ansible命令中包含選項--ask-become-pass
。這將提示您提供遠程用戶sudo密碼:
這個選項對於ansible-playbook
也是有效的:
使用自定義清單文件
默認的清單文件通常位於/etc/ansible/hosts
,但您也可以在運行Ansible命令和playbook時使用-i
選項指向自定義清單文件。Ansible還支持清單腳本來構建動態清單文件,用於當您的清單波動時,伺服器經常創建和銷毀。自定義清單文件對於設置每個項目的清單非常有用,可以包含在版本控制系統(如Git)中:
對於ansible-playbook
,同樣的選項也是有效的:
執行 臨時 命令
要在節點上執行命令,請使用-a
選項,後跟您要運行的命令,用引號括起來。
這將在您的清單中的所有節點上執行uname -a
:
還可以使用選項-m
運行Ansible模塊。以下命令將在您的清單中的server1
上安裝套件vim
:
在對節點進行更改之前,您可以進行試運行以預測您的命令將如何影響服務器。這可以通過包含選項--check
來完成:
執行Playbooks
要運行一個Playbook並執行其中定義的所有任務,請使用ansible-playbook
命令:
要覆蓋Playbook中的默認hosts
選項並將執行限制為特定組或主機,請在您的命令中包含選項-l
:
獲取有關戲劇的信息
選項--list-tasks
用於列出將由戲劇執行的所有任務,而不對遠程服務器進行任何更改:
同樣,可以列出將受戲劇影響的所有主機,而不在遠程服務器上運行任何任務:
您可以使用標籤來限制戲劇的執行。要列出戲劇中可用的所有標籤,請使用選項--list-tags
:
控制劇本執行
您可以使用選項--start-at-task
來定義劇本的新入口點。然後,Ansible將跳過指定任務之前的所有內容,從該點開始執行戲劇的其餘部分。此選項需要一個有效的任務名稱作為參數:
要僅執行與特定標籤相關的任務,您可以使用選項--tags
。例如,如果您只想執行標記為nginx
或mysql
的任務,您可以使用:
如果您想跳过所有标记为特定标签的任务,请使用--skip-tags
。以下命令将执行myplaybook.yml
,跳过所有标记为mysql
的任务:
使用 Ansible Vault 存储敏感数据
如果您的 Ansible playbook 涉及诸如密码、API 密钥和凭据等敏感数据,通过使用加密机制来保护这些数据的安全至关重要。Ansible 提供了ansible-vault
来加密文件和变量。
尽管可以加密任何 Ansible 数据文件以及二进制文件,但更常见的是使用ansible-vault
来加密包含敏感数据的变量文件。使用此工具加密文件后,只有在提供首次加密文件时定义的相关密码时,才能执行、编辑或查看其内容。
创建新的加密文件
您可以使用以下命令创建新的加密 Ansible 文件:
此命令将执行以下操作:
- 首先,它會提示您輸入新密碼。每次訪問文件內容時,無論是編輯、查看還是僅使用這些值運行playbook或命令,您都需要提供此密碼。
- 接下來,它將打開您的默認命令行編輯器,以便您將文件填充為所需內容。
- 最後,當您編輯完成時,
ansible-vault
將文件保存為加密數據。
加密現有的 Ansible 文件
要加密現有的 Ansible 文件,您可以使用以下語法:
這將提示您輸入密碼,以便在訪問文件 credentials.yml
時使用。
查看加密文件的內容
如果您想查看以前使用 ansible-vault
加密的文件的內容,並且您不需要更改其內容,您可以使用:
這將提示您提供首次使用 ansible-vault
加密文件時選擇的密碼。
編輯加密文件
要編輯之前使用 Ansible Vault 加密的文件內容,執行:
這將提示您提供首次使用 ansible-vault
加密 credentials.yml
文件時選擇的密碼。密碼驗證後,將使用您的默認命令行編輯器打開文件的未加密內容,讓您進行更改。完成後,您可以像平常一樣保存並關閉文件,更新後的內容將以加密數據的形式保存。
解密加密文件
如果您希望永久將之前使用 ansible-vault
加密的文件恢復為其未加密版本,可以使用以下語法:
這將提示您提供首次使用 ansible-vault
加密 credentials.yml
文件時使用的相同密碼。密碼驗證後,文件內容將保存到磁盤上作為未加密數據。
使用多個金庫密碼
Ansible支持按不同金庫ID分組的多個金庫密碼。如果您想為不同的環境(如開發、測試和生產環境)設置專用的金庫密碼,這將非常有用。
要使用自定義金庫ID創建新的加密文件,請在--vault-id
選項中包括一個標籤和ansible-vault
可以找到該金庫密碼的位置。標籤可以是任何標識符,位置可以是prompt
,表示該命令應提示您輸入密碼,或者是指向密碼文件的有效路徑。
這將創建一個名為dev的新金庫ID,該金庫使用prompt
作為密碼來源。通過將此方法與組變量文件結合使用,您將能夠為每個應用程序環境設置單獨的ansible金庫:
我們使用dev和prod作為金庫ID,以演示如何按環境創建單獨的金庫,但您可以創建任意多個金庫,並且可以使用您選擇的任何標識符作為金庫ID。
現在,要查看、編輯或解密這些文件,您需要在ansible-vault
命令中提供相同的金庫ID和密碼來源:
使用密碼檔案
如果您需要使用第三方工具自動配置伺服器並使用 Ansible,您需要一種方法來提供金鑰密碼,而不需要提示輸入。您可以使用 ansible-vault
來使用 密碼檔案。
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
要使用 ansible-vault
來使用密碼檔案,您需要在執行任何金鑰命令時提供密碼檔案的路徑:
Ansible 不會對使用 prompt
或密碼檔案作為密碼來源加密的內容進行區分,只要輸入密碼相同即可。在實際操作中,這意味著可以使用 prompt
加密文件,然後稍後使用密碼檔案存儲與 prompt
方法相同的密碼。反之亦然:可以使用密碼檔案加密內容,然後稍後使用 prompt
方法,在 Ansible 提示時提供相同的密碼。
為了提供更多的靈活性和安全性,您可以使用 Python 腳本從其他來源獲取密碼,而不是將您的金鑰密碼存儲在純文本文件中。官方的 Ansible 存儲庫包含一些 金鑰腳本範例,您可以在創建符合項目特定需求的自定義腳本時參考這些範例。
使用 Ansible Vault 加密数据运行 Playbook
每当你运行一个使用先前通过 ansible-vault
加密的数据的 Playbook 时,你需要向 Playbook 命令提供 Vault 密码。
如果你在加密此 Playbook 中使用的数据时使用了默认选项和 prompt
密码来源,你可以使用选项 --ask-vault-pass
让 Ansible 提示你输入密码:
如果你使用了密码文件而不是提示输入密码,你应该使用选项 --vault-password-file
代替:
如果你正在使用一个 vault ID 下加密的数据,你需要提供与首次加密数据时使用的相同的 vault ID 和密码来源:
如果在与你的 vault ID 配合使用密码文件,则应提供标签,后跟密码文件的完整路径作为密码来源:
如果你的 Play 使用了多个 vaults,你应该为每个 vault 提供一个 --vault-id
参数,顺序不限:
调试
如果在執行 Ansible 命令和 Playbook 過程中遇到錯誤,增加輸出詳細度是一個好主意,以獲取有關問題的更多信息。您可以通過在命令中包含 -v
選項來實現這一點:
如果您需要更多細節,可以使用 -vvv
,這將增加輸出的詳細程度。如果無法通過 Ansible 連接到遠程節點,請使用 -vvvv
以獲取連接調試信息:
結論
本指南涵蓋了一些您在配置服務器時可能使用的最常見的 Ansible 命令,例如如何在節點上執行遠程命令以及如何使用各種自定義設置運行 Playbook。
還有其他命令變體和標誌,您可能會發現它們對您的 Ansible 工作流程有用。要獲取所有可用選項的概述,可以使用 help 命令:
如果您想要更全面地了解 Ansible 及其所有可用的命令和功能,請參閱 官方 Ansible 文檔。
如果您想要查看 Ansible 的另一個實際示例,請查看我們的指南,該指南涵蓋了 如何使用 Ansible 在 Ubuntu 20.04 上安裝和設置 Docker。
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide