1. 程式人生 > >Ansible:像系統管理員一樣思考的自動化框架 | Linux 中國

Ansible:像系統管理員一樣思考的自動化框架 | Linux 中國

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1直到我開始接觸 Ansible,我才覺得這才是系統管理員喜歡的東西。-- Shawn Powers
有用的原文連結請訪問文末的“原文連結”獲得可點選的文內連結、全尺寸原圖和相關文章。致謝編譯自 | http://www.linuxjournal.com/content/ansible-automation-framework-thinks-sysadmin 
 作者 | Shawn Powers
 譯者 | Liang Chen (Flowsnow) ? ? ? 共計翻譯:18 篇 貢獻時間:838 天

這些年來,我已經寫了許多關於 DevOps 工具的文章,也培訓了這方面的人員。儘管這些工具很棒,但很明顯,大多數都是按照開發人員的思路設計出來的。這也沒有什麼問題,因為以程式設計的方式接近配置管理是重點。不過,直到我開始接觸 Ansible,我才覺得這才是系統管理員喜歡的東西。

喜歡的一部分原因是 Ansible 與客戶端計算機通訊的方式,是通過 SSH 的。作為系統管理員,你們都非常熟悉通過 SSH 連線到計算機,所以從單詞“去”的角度來看,相對於其它選擇,你更容易理解 Ansible。

考慮到這一點,我打算寫一些文章,探討如何使用 Ansible。這是一個很好的系統,但是當我第一次接觸到這個系統的時候,不知道如何開始。這並不是學習曲線陡峭。事實上,問題是在開始使用 Ansible 之前,我並沒有太多的東西要學,這才是讓人感到困惑的。例如,如果您不必安裝客戶端程式(Ansible 沒有在客戶端計算機上安裝任何軟體),那麼您將如何啟動?

踏出第一步

起初 Ansible 對我來說非常困難的原因在於配置伺服器/客戶端的關係是非常靈活的,我不知道我該從何入手。事實是,Ansible 並不關心你如何設定 SSH 系統。它會利用你現有的任何配置。需要考慮以下幾件事情:

☉ Ansible 需要通過 SSH 連線到客戶端計算機。☉ 連線後,Ansible 需要提升許可權才能配置系統,安裝軟體包等等。

不幸的是,這兩個考慮真的帶來了一堆蠕蟲。連線到遠端計算機並提升許可權是一件可怕的事情。當您在遠端計算機上安裝代理並使用 Chef 或 Puppet 處理特權升級問題時,似乎感覺就沒那麼可怕了。 Ansible 並非不安全,而是安全的決定權在你手中。

接下來,我將列出一系列潛在的配置,以及每個配置的優缺點。這不是一個詳盡的清單,但是你會受到正確的啟發,去思考在你自己的環境中什麼是理想的配置。也需要注意,我不會提到像 Vagrant 這樣的系統,因為儘管 Vagrant 在構建測試和開發的敏捷架構時非常棒,但是和一堆伺服器是非常不同的,因此考慮因素是極不相似的。

一些 SSH 場景

1)在 Ansible 配置中,root 使用者以密碼進入遠端計算機。

擁有這個想法是一個非常可怕的開始。這個設定的“優點”是它消除了對特權提升的需要,並且遠端伺服器上不需要其他使用者帳戶。 但是,這種便利的成本是不值得的。 首先,大多數系統不會讓你在不改變預設配置的情況下以 root 身份進行 SSH 登入。預設的配置之所以如此,坦率地說,是因為允許 root 使用者遠端連線是一個不好的主意。 其次,將 root 密碼放在 Ansible 機器上的純文字配置檔案中是不合適的。 真的,我提到了這種可能性,因為這是可以的,但這是應該避免的。 請記住,Ansible 允許你自己配置連線,它可以讓你做真正愚蠢的事情。 但是請不要這麼做。

2)使用儲存在 Ansible 配置中的密碼,以普通使用者的身份進入遠端計算機。

這種情況的一個優點是它不需要太多的客戶端配置。 大多數使用者預設情況下都可以使用 SSH,因此 Ansible 應該能夠使用使用者憑據並且能夠正常登入。 我個人不喜歡在配置檔案中以純文字形式儲存密碼,但至少它不是 root 密碼。 如果您使用此方法,請務必考慮遠端伺服器上的許可權提升方式。 我知道我還沒有談到許可權提升,但是如果你在配置檔案中配置了一個密碼,這個密碼可能會被用來獲得 sudo 訪問許可權。 因此,一旦發生洩露,您不僅已經洩露了遠端使用者的帳戶,還可能洩露整個系統。

3)使用具有空密碼的金鑰對進行身份驗證,以普通使用者身份進入遠端計算機。

這消除了將密碼儲存在配置檔案中的弊端,至少在登入的過程中消除了。 沒有密碼的金鑰對並不理想,但這是我經常做的事情。 在我的個人內部網路中,我通常使用沒有密碼的金鑰對來自動執行許多事情,如需要身份驗證的定時任務。 這不是最安全的選擇,因為私鑰洩露意味著可以無限制地訪問遠端使用者的帳戶,但是相對於在配置檔案中儲存密碼我更喜歡這種方式。

4)使用通過密碼保護的金鑰對進行身份驗證,以普通使用者的身份通過 SSH 連線到遠端計算機。

這是處理遠端訪問的一種非常安全的方式,因為它需要兩種不同的身份驗證因素來解密:私鑰和密碼。 如果你只是以互動方式執行 Ansible,這可能是理想的設定。 當你執行命令時,Ansible 會提示你輸入私鑰的密碼,然後使用金鑰對登入到遠端系統。 是的,只需使用標準密碼登入並且不用在配置檔案中指定密碼即可完成,但是如果不管怎樣都要在命令列上輸入密碼,那為什麼不在保護層新增金鑰對呢?

5)使用密碼保護金鑰對進行 SSH 連線,但是使用 ssh-agent “解鎖”私鑰。

這並不能完美地解決無人值守、自動化的 Ansible 命令的問題,但是它確實也使安全設定變得相當方便。 ssh-agent 程式一次驗證密碼,然後使用該驗證進行後續連線。當我使用 Ansible 時,這是我想要做的事情。如果我是完全值得信任的,我通常仍然使用沒有密碼的金鑰對,但是這通常是因為我在我的家庭伺服器上工作,是不是容易受到攻擊的。

在配置 SSH 環境時還要記住一些其他注意事項。 也許你可以限制 Ansible 使用者(通常是你的本地使用者),以便它只能從一個特定的 IP 地址登入。 也許您的 Ansible 伺服器可以位於不同的子網中,位於強大的防火牆之後,因此其私鑰更難以遠端訪問。 也許 Ansible 伺服器本身沒有安裝 SSH 伺服器,所以根本沒法訪問。 同樣,Ansible 的優勢之一是它使用 SSH 協議進行通訊,而且這是一個你用了多年的協議,你已經把你的系統調整到最適合你的環境了。 我不是宣傳“最佳實踐”的忠實粉絲,因為實際上最好的做法是考慮你的環境,並選擇最適合你情況的設定。

許可權提升

一旦您的 Ansible 伺服器通過 SSH 連線到它的客戶端,就需要能夠提升特權。 如果你選擇了上面的選項 1,那麼你已經是 root 了,這是一個有爭議的問題。 但是由於沒有人選擇選項 1(對吧?),您需要考慮客戶端計算機上的普通使用者如何獲得訪問許可權。 Ansible 支援各種許可權提升的系統,但在 Linux 中,最常用的選項是 sudo 和 su。 和 SSH 一樣,有幾種情況需要考慮,雖然肯定還有其他選擇。

1)使用 su 提升許可權。

對於 RedHat/CentOS 使用者來說,可能預設是使用 su 來獲得系統訪問許可權。 預設情況下,這些系統在安裝過程中配置了 root 密碼,要想獲得特殊訪問許可權,您需要輸入該密碼。使用 su的問題在於,雖說它可以給了您完全訪問遠端系統,而您確實也可以完全訪問遠端系統。 (是的,這是諷刺。)另外,su 程式沒有使用金鑰對進行身份驗證的能力,所以密碼必須以互動方式輸入或儲存在配置檔案中。 由於它實際上是 root 密碼,因此將其儲存在配置檔案中聽起來像、也確實是一個可怕的想法。

2)使用 sudo 提升許可權。

這就是 Debian/Ubuntu 系統的配置方式。 正常使用者組中的使用者可以使用 sudo 命令並使用 root 許可權執行該命令。 隨之而來的是,這仍然存在密碼儲存或互動式輸入的問題。 由於在配置檔案中儲存使用者的密碼看起來不太可怕,我猜這是使用 su 的一個進步,但是如果密碼被洩露,仍然可以完全訪問系統。 (畢竟,輸入 sudo 和 su - 都將允許使用者成為 root 使用者,就像擁有 root 密碼一樣。)

3) 使用 sudo 提升許可權,並在 sudoers 檔案中配置 NOPASSWD。

再次,在我的本地環境中,我就是這麼做的。 這並不完美,因為它給予使用者帳戶無限制的 root 許可權,並且不需要任何密碼。 但是,當我這樣做並且使用沒有密碼短語的 SSH 金鑰對時,我可以讓 Ansible 命令更輕鬆的自動化。 再次提示,雖然這很方便,但這不是一個非常安全的想法。

4)使用 sudo 提升許可權,並在特定的可執行檔案上配置 NOPASSWD。

這個想法可能是安全性和便利性的最佳折衷。 基本上,如果你知道你打算用 Ansible 做什麼,那麼你可以為遠端使用者使用的那些應用程式提供 NOPASSWD 許可權。 這可能會讓人有些困惑,因為 Ansible 使用 Python 來處理很多事情,但是經過足夠的嘗試和錯誤,你應該能夠弄清原理。 這是額外的工作,但確實消除了一些明顯的安全漏洞。

計劃實施

一旦你決定如何處理 Ansible 認證和許可權提升,就需要設定它。 在熟悉 Ansible 之後,您可能會使用該工具來幫助“引導”新客戶端,但首先手動配置客戶端非常重要,以便您知道發生了什麼事情。 將你熟悉的事情變得自動化比從頭開始自動化要好。

我已經寫過關於 SSH 金鑰對的文章,網上有無數的設定類的文章。 來自 Ansible 伺服器的簡短版本看起來像這樣:

  1. #ssh-keygen

  2. #ssh-copy-id-i .ssh/id_dsa.pub [email protected].computer.ip

  3. #ssh [email protected].computer.ip

如果您在建立金鑰對時選擇不使用密碼,最後一步您應該可以直接進入遠端計算機,而不用輸入密碼或金鑰串。

為了在 sudo 中設定許可權提升,您需要編輯 sudoers 檔案。 你不應該直接編輯檔案,而是使用:

  1. #sudo visudo

這將開啟 sudoers 檔案並允許您安全地進行更改(儲存時會進行錯誤檢查,所以您不會意外地因為輸入錯誤將自己鎖住)。 這個檔案中有一些例子,所以你應該能夠弄清楚如何分配你想要的確切的許可權。

一旦配置完成,您應該在使用 Ansible 之前進行手動測試。 嘗試 SSH 到遠端客戶端,然後嘗試使用您選擇的任何方法提升許可權。 一旦你確認配置的方式可以連線,就可以安裝 Ansible 了。

安裝 Ansible

由於 Ansible 程式僅安裝在一臺計算機上,因此開始並不是一件繁重的工作。 Red Hat/Ubuntu 系統的軟體包安裝有點不同,但都不是很困難。

在 Red Hat/CentOS 中,首先啟用 EPEL 庫:

  1. sudoyum install epel-release

然後安裝 Ansible:

  1. sudoyum install ansible

在 Ubuntu 中,首先啟用 Ansible PPA:

  1. sudo apt-add-repository spa:ansible/ansible

  2. (press ENTER to access the key and add the repo)

然後安裝 Ansible:

  1. sudoapt-get update

  2. sudoapt-get install ansible

Ansible 主機檔案配置

Ansible 系統無法知道您希望它控制哪個客戶端,除非您給它一個計算機列表。 該列表非常簡單,看起來像這樣:

  1. #file/etc/ansible/hosts

  2. [webservers]

  3. blogserver ansible_host=192.168.1.5

  4. wikiserver ansible_host=192.168.1.10

  5. [dbservers]

  6. mysql_1 ansible_host=192.168.1.22

  7. pgsql_1 ansible_host=192.168.1.23

方括號內的部分是指定的組。 單個主機可以列在多個組中,而 Ansible 可以指向單個主機或組。 這也是配置檔案,比如純文字密碼的東西將被儲存,如果這是你計劃的那種設定。 配置檔案中的每一行配置一個主機地址,並且可以在 ansible_host 語句之後新增多個宣告。 一些有用的選項是:

  1. ansible_ssh_pass

  2. ansible_become

  3. ansible_become_method

  4. ansible_become_user

  5. ansible_become_pass

Ansible 保險庫Vault

(LCTT 譯註:Vault 作為 ansible 的一項新功能可將例如密碼、金鑰等敏感資料檔案進行加密,而非明文存放)

我也應該注意到,儘管安裝程式比較複雜,而且這不是在您首次進入 Ansible 世界時可能會做的事情,但該程式確實提供了一種加密保險庫中的密碼的方法。 一旦您熟悉 Ansible,並且希望將其投入生產,將這些密碼儲存在加密的 Ansible 保險庫中是非常理想的。 但是本著先學會爬再學會走的精神,我建議首先在非生產環境下使用無密碼方法。

系統測試

最後,你應該測試你的系統,以確保客戶端可以正常連線。 ping 測試將確保 Ansible 計算機可以 ping 每個主機:

  1. ansible -m ping all

執行後,如果 ping 成功,您應該看到每個定義的主機顯示 ping 的訊息:pong。 這實際上並沒有測試認證,只是測試網路連線。 試試這個來測試你的認證:

  1. ansible -m shell -a 'uptime' webservers

您應該可以看到 webservers 組中每個主機的執行時間命令的結果。

在後續文章中,我計劃開始深入 Ansible 管理遠端計算機的功能。 我將介紹各種模組,以及如何使用 ad-hoc 模式來完成一些按鍵操作,這些操作在命令列上單獨處理都需要很長時間。 如果您沒有從上面的示例 Ansible 命令中獲得預期的結果,請花些時間確保身份驗證可以工作。 如果遇到困難,請查閱 Ansible 文件[1]獲取更多幫助。

via: http://www.linuxjournal.com/content/ansible-automation-framework-thinks-sysadmin

作者:Shawn Powers[3] 譯者:Flowsnow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關推薦

Ansible系統管理員一樣思考自動化框架 | Linux 中國

直到我開始接觸 Ansible,我才覺得這才是系統管理員喜歡的東西。-- Shawn Power

資料科學家一樣思考12步指南(上)

介紹 目前,資料科學家正在受到很多關注,因此,有關資料科學的書籍正在激增。我看過很多關於資料科學的書籍,在我看來他們中的大多數

資料科學家一樣思考12步指南(中)

像資料科學家一樣思考:12步指南(上)《像資料科學家一樣思考》 7-工程產品 下一步是建立統計軟體。如果統計是分析和從

程序員一樣思考】 讀書筆記

尋找 讀書筆記 讀書 bsp 如果 重新 劃分 可能 抽象 通過梳理條件理清思路。 從最強約束條件入手。 如果沒有意識到所有可以采取的動作,很可能無法解決問題。列舉所有可能的操作,測試這些操作的每種組合,知道發現可行方案。 通過簡化問題尋找解決辦法。 通過抽象問題,與以往項

程序員一樣思考】讀書筆記4

concat 其中 同時 arr 產生 new con 例如 程序員 1.如果多個變量同時指向一個內存並且調用Delete刪除了其中任意一個變量,實際上就為所有的變量銷毀了這塊內存。如果沒有明確的把其他這些變量設置為NULL,他們此時就成為了野指針,對野指針調用delete

計算機科學家一樣思考Python》pdf

方法 padding add bbb 而且 文件 書籍 數據結構 引導 下載地址:網盤下載 內容簡介 · · · · · ·《像計算機科學家一樣思考python》按照培養讀者像計算機科學家一樣的思維方式的思路來教授python語言編程。全書貫穿的主體是如何思考、設計、開

如何程序員一樣思考——解決問題的經驗

例子 最重要的 roc 現在 開始學習 事情 rod ~~ 更多 如何你對編程感興趣,你可能見過這句話: “Everyone in this country should learn to program a computer, because it teaches you

電腦科學家一樣思考Python (第2版)高清PDF電子版下載

本書以培養讀者以電腦科學家一樣的思維方式來理解Python語言程式設計。貫穿全書的主體是如何思考、設計、開發的方法,而具體的程式語言,只是提供了一個具體場景方便介紹的媒介。 全書共21章,詳細介紹Python語言程式設計的方方面面。本書從基本的程式設計概念開始講起,包括語言的語法和語義,而且每個程式設計概念

架構師一樣思考

很多程式設計師經常陷入迷茫,技術發展日新月異,沒有充足的時間精力去學習新技術,每天都疲於產品經理、市場、領導的各種需求的編碼實現,沒有絲毫的成就感。 如果要想有成就感,就需要了解業務,清楚自己做的東西對使用者和公司的價值。馬雲在建立阿里巴巴的時候,就明確了

海天味業科技訊類腦機 人腦那樣工作思考

讓機器像人腦一樣工作——這不是幻想,已經有科學家走在實現它的路上。 之所以被稱為類腦超級計算機,是因為它在模仿生物大腦處理資訊的方式,而且處理速度和規模遠超同類機型,但在體系結構上與傳統意義的超級計算機有明顯不同。我更傾向於把這類模仿生物大腦的機器統稱為‘類腦機’。”北京大學計算機科學技

電腦科學家一樣思考Python》學習筆記

第11章 字典 字典方法dict.get(key,default)和dict.setdefault(key,default)區別:   如果key在字典裡: 如果key不在字典裡: dict.get(k

如何程式設計師一樣思考

如果你對程式設計感興趣,你可能已經見過這句話: “這個國家的每個人,都應該學習程式設計,因為它教會了你思考。” — Steve Jobs 你也可能在尋思,啥叫像程式設計師一樣思考,我如何才能做到? 這篇文章,目的就是教你如何達到這個目標。 其實,核心是

電腦科學家一樣思考Python》練習4-3

題目:畫出如下的圖形思路:isosceles函式:畫一個等腰三角形。具體步驟如下:主要程式碼如下:import turtle import math bob = turtle.Turtle() bob.delay = 0.001 def isosceles(t, r, ang

Think Julia:如何電腦科學家一樣思考(第一節)

Think Julia:如何像電腦科學家一樣思考 Ben Lauwens [email protected] Allen Downey [email protected] 後記 版權所有©2018 Allen Downey,Ben

電腦科學家一樣思考python

18 繼承(inheritance) 繼承 是面向物件程式設計 的一種語言特性; 它能 通過對現有的某個類稍作修改的方式 定義一個新的類。 現有的類 稱為 父類, 新的類 稱為子類。 之所以被稱為 繼承,是因為 子類 包含有 父類中的方法。 17

產品思維——產品經理一樣思考

話說:不想做產品經理的程式猿不是好廚師,這幾年隨著產品經理這個崗位的火熱,越來越多的程式猿、設計師、專案經理等專業人士轉型去做產品經理。 做專業技術出身的人,往往會養成一種思維習慣,看問題的角度也會形成慣性,我們把這種思維習慣叫做工程師思維。 產品思維是產品經理應該具備

電腦科學家一樣思考Python pdf

《像電腦科學家一樣思考python》按照培養讀者像電腦科學家一樣的思維方式的思路來教授python語言程式設計。全書貫穿的主體是如何思考、設計、開發的方法,而具體的程式語言,只是提供一個具體場景方便介紹的媒介。《像電腦科學家一樣思考python》並不是一本介紹語言的書,而是一本介紹程式設計思想的書。和其他

恕我直言你可能真的不會java第7篇使用SQL一樣排序集合

在開始之前,我先賣個關子提一個問題:我們現在有一個Employee員工類。 ~~~ @Data @AllArgsConstructor public class Employee { private Integer id; private Integer age; //年齡 priva

程式設計師一樣思考——提高解決問題的能力

在以前的文章中,曾經提過“技術人員的價值,不在於你能寫出多麼優美的程式碼,也不在於你能設計出一個多麼大而全的高屋建瓴的架構,而在於你實實在在的解決問題的能力,在於你使用技術手段服務於業務的能力”。 最近一段時間,因工作中遇到一些現象,讓我重又想起這句話,並且試圖思考如何來提高解決問題的能力,有沒有一種方法論

Qt獲取系統CPU使用率(Windows+macOS+Linux

最近專案上有需求,需要根據CPU使用率來調整排程邏輯,因此寫了這個庫,沒有多少程式碼,直接開源好了 以下是README內容,直接搬過來: 介紹 JQCPUMonitor,是一個給Qt開發的,CPU使用率檢測庫,目前只檢測CPU整體使用率。 支援3個主要平臺,Windows、