91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux如何使用Ansible讓系統管理自動化

發布時間:2021-10-23 11:47:24 來源:億速云 閱讀:140 作者:小新 欄目:系統運維

這篇文章給大家分享的是有關linux如何使用Ansible讓系統管理自動化的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

什么是 Ansible?

Ansible 的網站上將之解釋為 “一個超級簡單的 IT 自動化引擎,可以自動進行云供給、配置管理、應用部署、服務內部編排,以及其他很多 IT 需求。” 通過在一個集中的位置定義好服務器集合,Ansible 可以在多個服務器上執行相同的任務。

如果你對 Bash 的 for 循環很熟悉,你會發現 Ansible 操作跟這很類似。區別在于 Ansible 是幕等的idempotent。通俗來說就是 Ansible 一般只有在確實會發生改變時才執行所請求的動作。比如,假設你執行一個 Bash 的 for 循環來為多個機器創建用戶,像這樣子:

for server in serverA serverB serverC; do ssh ${server} "useradd myuser"; done

這會在 serverA、serverB,以及 serverC 上創建 myuser 用戶;然而不管這個用戶是否存在,每次運行這個 for 循環時都會執行 useradd 命令。一個幕等的系統會首先檢查用戶是否存在,只有在不存在的情況下才會去創建它。當然,這個例子很簡單,但是幕等工具的好處將會隨著時間的推移變得越發明顯。

Ansible 是如何工作的?

Ansible 會將 Ansible playbooks 轉換成通過 SSH 運行的命令,這在管理類 UNIX 環境時有很多優勢:

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 絕大多數類 UNIX 機器默認都開了 SSH。

  3. 依賴 SSH 意味著遠程主機不需要有代理。

  4. 大多數情況下都無需安裝額外的軟件,Ansible 需要 2.6 或更新版本的 Python。而絕大多數 Linux 發行版默認都安裝了這一版本(或者更新版本)的 Python。

  5. Ansible 無需主節點。他可以在任何安裝有 Ansible 并能通過 SSH 訪問的主機上運行。

  6. 雖然可以在 cron 中運行 Ansible,但默認情況下,Ansible 只會在你明確要求的情況下運行。 

配置 SSH 密鑰認證

使用 Ansible 的一種常用方法是配置無需密碼的 SSH 密鑰登錄以方便管理。(可以使用 Ansible Vault 來為密碼等敏感信息提供保護,但這不在本文的討論范圍之內)。現在只需要使用下面命令來生成一個 SSH 密鑰,如示例 1 所示。

[09:44 user ~]$ ssh-keygenGenerating public/private rsa key pair。Enter file in which to save the key (/home/user/.ssh/id_rsa):Created directory '/home/user/.ssh'。Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /home/user/.ssh/id_rsa。Your public key has been saved in /home/user/.ssh/id_rsa.pub。The key fingerprint is:SHA256:TpMyzf4qGqXmx3aqZijVv7vO9zGnVXsh7dPbXAZ+LUQ user@user-fedoraThe key's randomart image is:+---[RSA 2048]----+|                 ||                 ||              E  ||       o .   .。||   .  + S    o+。||  . .o * .  .+ooo|| . .+o  o o oo+。*||。.ooo* o。*  .*+|| . o+*BO.o+    .o|+----[SHA256]-----+

示例 1 :生成一個 SSH 密鑰

在示例 1 中,直接按下回車鍵來接受默認值。任何非特權用戶都能生成 SSH 密鑰,也能安裝到遠程系統中任何用戶的 SSH 的 authorized_keys 文件中。生成密鑰后,還需要將之拷貝到遠程主機上去,運行下面命令:

ssh-copy-id root@servera

注意:運行 Ansible 本身無需 root 權限;然而如果你使用非 root 用戶,你需要為要執行的任務配置合適的 sudo 權限。

輸入 servera 的 root 密碼,這條命令會將你的 SSH 密鑰安裝到遠程主機上去。安裝好 SSH 密鑰后,再通過 SSH 登錄遠程主機就不再需要輸入 root 密碼了。

安裝 Ansible

只需要在示例 1 中生成 SSH 密鑰的那臺主機上安裝 Ansible。若你使用的是 Fedora,輸入下面命令:

sudo dnf install ansible -y

若運行的是 CentOS,你需要為 EPEL 倉庫配置額外的包:

sudo yum install epel-release -y

然后再使用 yum 來安裝 Ansible:

sudo yum install ansible -y

對于基于 Ubuntu 的系統,可以從 PPA 上安裝 Ansible:

sudo apt-get install software-properties-common -ysudo apt-add-repository ppa:ansible/ansiblesudo apt-get updatesudo apt-get install ansible -y

若你使用的是 macOS,那么推薦通過 Python PIP 來安裝:

sudo pip install ansible

對于其他發行版,請參見 Ansible 安裝文檔 。

Ansible Inventory

Ansible 使用一個 INI 風格的文件來追蹤要管理的服務器,這種文件被稱之為庫存清單Inventory。默認情況下該文件位于 /etc/ansible/hosts。本文中,我使用示例 2 中所示的 Ansible 庫存清單來對所需的主機進行操作(為了簡潔起見已經進行了裁剪):

[arch]nextcloudprometheusdesktop1desktop2vm-host15 [fedora]netflix [centos]conanconfluence7-repovm-server1gitlab [ubuntu]trusty-mirrornwnkids-tvmedia-centrenas [satellite]satellite [ocp]lb00ocp_dnsmaster01app01infra01

示例 2 : Ansible 主機文件

每個分組由中括號和組名標識(像這樣 [group1] ),是應用于一組服務器的任意組名。一臺服務器可以存在于多個組中,沒有任何問題。在這個案例中,我有根據操作系統進行的分組(archubuntucentosfedora),也有根據服務器功能進行的分組(ocpsatellite)。Ansible 主機文件可以處理比這復雜的多的情況。詳細內容,請參閱 庫存清單文檔。

運行命令

將你的 SSH 密鑰拷貝到庫存清單中所有服務器上后,你就可以開始使用 Ansible 了。Ansible 的一項基本功能就是運行特定命令。語法為:

ansible -a "some command"

例如,假設你想升級所有的 CentOS 服務器,可以運行:

ansible centos -a 'yum update -y'

注意:不是必須要根據服務器操作系統來進行分組的。我下面會提到,Ansible Facts 可以用來收集這一信息;然而,若使用 Facts 的話,則運行特定命令會變得很復雜,因此,如果你在管理異構環境的話,那么為了方便起見,我推薦創建一些根據操作系統來劃分的組。

這會遍歷 centos 組中的所有服務器并安裝所有的更新。一個更加有用的命令應該是 Ansible 的 ping 模塊了,可以用來驗證服務器是否準備好接受命令了:

ansible all -m ping

這會讓 Ansible 嘗試通過 SSH 登錄庫存清單中的所有服務器。在示例 3 中可以看到 ping 命令的部分輸出結果。

nwn | SUCCESS => {    "changed":false,    "ping":"pong"}media-centre | SUCCESS => {    "changed":false,    "ping":"pong"}nas | SUCCESS => {    "changed":false,    "ping":"pong"}kids-tv | SUCCESS => {    "changed":false,    "ping":"pong"}...

示例 3 :Ansible ping 命令輸出

運行指定命令的能力有助于完成快速任務(LCTT 譯注:應該指的那種一次性任務),但是如果我想在以后也能以同樣的方式運行同樣的任務那該怎么辦呢?Ansible playbooks 就是用來做這個的。

復雜任務使用 Ansible playbooks

Ansible劇本playbook就是包含 Ansible 指令的 YAML 格式的文件。我這里不打算講解類似 Roles 和 Templates 這些比較高深的內容。有興趣的話,請閱讀 Ansible 文檔。

在前一章節,我推薦你使用 ssh-copy-id 命令來傳遞你的 SSH 密鑰;然而,本文關注于如何以一種一致的、可重復性的方式來完成任務。示例 4 演示了一種以冥等的方式,即使 SSH 密鑰已經存在于目標主機上也能保證正確性的實現方法。

---- hosts:all  gather_facts:false  vars:    ssh_key:'/root/playbooks/files/laptop_ssh_key'  tasks:    - name:copy ssh key      authorized_key:        key:"{{ lookup('file',ssh_key) }}"        user:root

示例 4:Ansible 劇本 “pushsshkeys.yaml”

- hosts: 行標識了這個劇本應該在那個主機組上執行。在這個例子中,它會檢查庫存清單里的所有主機。

gather_facts: 行指明 Ansible 是否去搜索每個主機的詳細信息。我稍后會做一次更詳細的檢查。現在為了節省時間,我們設置 gather_factsfalse

vars: 部分,顧名思義,就是用來定義劇本中所用變量的。在示例 4 的這個簡短劇本中其實不是必要的,但是按慣例我們還是設置了一個變量。

***由 tasks: 標注的這個部分,是存放主體指令的地方。每個任務都有一個 -name:。Ansbile 在運行劇本時會顯示這個名字。

authorized_key: 是劇本所使用 Ansible 模塊的名字。可以通過命令 ansible-doc -a 來查詢 Ansible 模塊的相關信息; 不過通過網絡瀏覽器查看 文檔  可能更方便一些。authorized_key 模塊 有很多很好的例子可以參考。要運行示例 4 中的劇本,只要運行 ansible-playbook 命令就行了:

ansible-playbook push_ssh_keys.yaml

如果是***次添加 SSH 密鑰,SSH 會提示你輸入 root 用戶的密碼。

現在 SSH 密鑰已經傳輸到服務器中去了,可以來做點有趣的事了。

使用 Ansible 收集信息

Ansible 能夠收集目標系統的各種信息。如果你的主機數量很多,那它會特別的耗時。按我的經驗,每臺主機大概要花個 1 到 2 秒鐘,甚至更長時間;然而有時收集信息是有好處的。考慮下面這個劇本,它會禁止 root 用戶通過密碼遠程登錄系統:

---- hosts:all  gather_facts:true  vars:  tasks:    - name:Enabling ssh-key only root access      lineinfile:        dest:/etc/ssh/sshd_config        regexp:'^PermitRootLogin'        line:'PermitRootLogin without-password'      notify:        - restart_sshd        - restart_ssh   handlers:    - name:restart_sshd      service:        name:sshd        state:restarted        enabled:true      when:ansible_distribution == 'RedHat'    - name:restart_ssh      service:        name:ssh        state:restarted        enabled:true      when:ansible_distribution == 'Debian'

示例 5:鎖定 root 的 SSH 訪問

在示例 5 中 sshd_config 文件的修改是有條件  的,只有在找到匹配的發行版的情況下才會執行。在這個案例中,基于 Red Hat 的發行版與基于 Debian 的發行版對 SSH  服務的命名是不一樣的,這也是使用條件語句的目的所在。雖然也有其他的方法可以達到相同的效果,但這個例子很好演示了 Ansible  信息的作用。若你想查看 Ansible 默認收集的所有信息,可以在本地運行 setup 模塊:

ansible localhost -m setup |less

Ansible 收集的所有信息都能用來做判斷,就跟示例 4 中 vars: 部分所演示的一樣。所不同的是,Ansible 信息被看成是內置 變量,無需由系統管理員定義。

感謝各位的閱讀!關于“linux如何使用Ansible讓系統管理自動化”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广饶县| 黑河市| 娄底市| 革吉县| 南康市| 九台市| 武隆县| 沭阳县| 那坡县| 锡林浩特市| 乐业县| 伊吾县| 武陟县| 康马县| 靖远县| 社旗县| 沛县| 加查县| 延川县| 晋中市| 四子王旗| 青州市| 双鸭山市| 杨浦区| 太原市| 五台县| 同仁县| 柯坪县| 涟源市| 望都县| 社会| 成都市| 托克托县| 页游| 万盛区| 双鸭山市| 股票| 杨浦区| 民乐县| 和龙市| 武隆县|