Ansible-免密登錄與主機清單Inventory

来源:https://www.cnblogs.com/zhanglianghhh/archive/2020/03/15/12501193.html
-Advertisement-
Play Games

Ansible的指定用戶與密碼登錄、免密登錄、指定ssh埠以及主機清單Inventory配置 ...


 

Ansible的指定用戶與密碼登錄、免密登錄、指定ssh埠以及主機清單Inventory配置

在實際使用中並不需要對ansible配置進行修改,或者說只有需要的時候才修改ansible配置。

添加用戶賬號

說明:

1、 運維人員使用的登錄賬號;

2、 所有的業務都放在 /app/ 下「yun用戶的家目錄」,避免業務數據亂放;

3、 該用戶也被 ansible 使用,因為幾乎所有的生產環境都是禁止 root 遠程登錄的(因此該 yun 用戶也進行了 sudo 提權)。

1 # 使用一個專門的用戶,避免直接使用root用戶
2 # 添加用戶、指定家目錄並指定用戶密碼
3 # sudo提權
4 # 讓其它普通用戶可以進入該目錄查看信息
5 useradd -u 1050 -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun
6 echo "yun  ALL=(ALL)       NOPASSWD: ALL" >>  /etc/sudoers
7 chmod 755 /app/

基於密碼連接「瞭解」

在實際生產環境中,建議使用基於秘鑰連接而不是密碼連接。

原因如下:

1、將密碼直接寫入文件中,有安全隱患;

2、生產環境的密碼可能會定期更換,如果基於密碼連接,那麼我們也會頻繁的維護,造成維護成本高;

3、基於秘鑰連接,我們只需要做一次秘鑰分發,後期連接無需任何修改。

清單配置

 1 [yun@ansi-manager ansible_info]$ pwd
 2 /app/ansible_info
 3 [yun@ansi-manager ansible_info]$ cat hosts_pwd 
 4 # 未分組機器,放在所有組前面
 5 # 預設埠22,可省略
 6 # 方式1:主機 + 埠 + 密碼
 7 172.16.1.180   ansible_ssh_port=22 ansible_ssh_user=yun ansible_ssh_pass='123456'
 8 
 9 # 方式2:主機 + 埠 + 密碼
10 [proxyservers]
11 172.16.1.18[1:2] ansible_ssh_port=22 ansible_ssh_user=yun ansible_ssh_pass='123456'
12 
13 # 方式3:主機 + 埠 + 密碼
14 [webservers]
15 172.16.1.18[3:5] ansible_ssh_port=22 ansible_ssh_user=yun
16 [webservers:vars]
17 ansible_ssh_pass='123456'

 

測驗連接

1 [yun@ansi-manager ansible_info]$ ansible 172.16.1.180 -m ping -i ./hosts_pwd   # 普通用戶執行
2 172.16.1.180 | FAILED! => {
3     "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
4 }
5 [yun@ansi-manager ansible_info]$ sudo ansible 172.16.1.180 -m ping -i ./hosts_pwd  # 提權使用 root 用戶執行
6 172.16.1.180 | FAILED! => {
7     "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
8 }

大概提示信息:因為啟用了主機密鑰檢查,而 sshpass 不支持這一點。請將此主機「172.16.1.180」的指紋添加到你本機的known_hosts文件中以管理此主機。

跳過主機密鑰檢查,有兩種方式:

方式1:修改 Linux 系統配置

1 [root@ansi-manager ssh]# vim /etc/ssh/ssh_config 
2 #   AddressFamily any
3 #   ConnectTimeout 0
4 #   StrictHostKeyChecking ask   # 將該配置的註釋打開,並改為  StrictHostKeyChecking no  這樣針對所有用戶都不會在進行 「主機密鑰檢查」了
5 #   IdentityFile ~/.ssh/identity

但是這個是 Linux 自帶的配置,我們不能隨意去更改。因此不建議如此操作。

方式2:修改 ansible 配置

1 [root@ansi-manager ansible]# pwd
2 /etc/ansible
3 [root@ansi-manager ansible]# vim ansible.cfg
4 # uncomment this to disable SSH key host checking
5 host_key_checking = False    # 將該配置的註釋去掉

改配置僅對 root 用戶生效,其他普通用戶是不生效的。這裡使用該方法。

再次連接測試

 1 [yun@ansi-manager ansible_info]$ ansible 172.16.1.180 -m ping -i ./hosts_pwd  # 普通用戶還是不行
 2 172.16.1.180 | FAILED! => {
 3     "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
 4 }
 5 [yun@ansi-manager ansible_info]$ sudo ansible 172.16.1.180 -m ping -i ./hosts_pwd  # 提權使用 root 用戶執行
 6 172.16.1.180 | SUCCESS => {
 7     "ansible_facts": {
 8         "discovered_interpreter_python": "/usr/bin/python"
 9     }, 
10     "changed": false, 
11     "ping": "pong"
12 }
13 [yun@ansi-manager ansible_info]$ sudo ansible proxyservers -m ping -i ./hosts_pwd  # 正常
14 [yun@ansi-manager ansible_info]$ sudo ansible webservers -m ping -i ./hosts_pwd    # 正常

基於秘鑰連接「推薦」

在實際生產環境中,建議使用基於秘鑰連接而不是密碼連接。

原因如下:

1、將密碼直接寫入文件中,有安全隱患;

2、生產環境的密碼可能會定期更換,如果基於密碼連接,那麼我們也會頻繁的維護,造成維護成本高;

3、基於秘鑰連接,我們只需要做一次秘鑰分發,後期連接無需任何修改。

實現yun用戶免秘鑰登錄

要求:根據規劃實現 172.16.1.180 到 172.16.1.180、172.16.1.181、172.16.1.182、172.16.1.183、172.16.1.184、172.16.1.185 免秘鑰登錄

因此需要在 172.16.1.180 機器創建秘鑰,然後分發到受控機器。

創建秘鑰

1 [yun@ansi-manager ~]$ ssh-keygen -t rsa  # 一路回車即可 註意使用的是 yun 用戶
2 # 生成之後會在用戶的根目錄生成一個 “.ssh”的文件夾
3 [yun@ansi-manager ~]$ ll -d .ssh/
4 drwx------ 2 yun yun 38 Jul 25 10:51 .ssh/
5 [yun@ansi-manager ~]$ ll .ssh/
6 total 8
7 -rw------- 1 yun yun 1675 Jul 25 10:51 id_rsa
8 -rw-r--r-- 1 yun yun  398 Jul 25 10:51 id_rsa.pub

分發密鑰

1 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.180
2 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.181
3 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.182
4 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.183
5 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.184
6 [yun@ansi-manager ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.185

測驗免密登錄是否成功

1 [yun@ansi-manager ~]$ ssh 172.16.1.180  # 等價於 ssh yun@172.16.1.180
2 [yun@ansi-manager ~]$ ssh 172.16.1.181
3 [yun@ansi-manager ~]$ ssh 172.16.1.182
4 [yun@ansi-manager ~]$ ssh 172.16.1.183
5 [yun@ansi-manager ~]$ ssh 172.16.1.184
6 [yun@ansi-manager ~]$ ssh 172.16.1.185

註意:必須保證每台機器都免密登錄成功,因此需要每台機器都驗證。

.ssh目錄中的文件說明

 1 [yun@ansi-manager .ssh]$ pwd
 2 /app/.ssh
 3 [yun@ansi-manager .ssh]$ ll
 4 total 16
 5 -rw------- 1 yun yun  398 Jul 25 11:01 authorized_keys
 6 -rw------- 1 yun yun 1675 Jul 25 10:51 id_rsa
 7 -rw-r--r-- 1 yun yun  398 Jul 25 10:51 id_rsa.pub
 8 -rw-r--r-- 1 yun yun 1120 Jul 25 11:04 known_hosts 
 9 ########################################################################################
10 authorized_keys :存放要遠程免密登錄機器的公鑰,主要通過這個文件記錄多台要遠程登錄機器的公鑰
11 id_rsa : 生成的私鑰文件
12 id_rsa.pub :生成的公鑰文件
13 know_hosts : 已知的主機公鑰清單

清單配置

 1 [yun@ansi-manager ansible_info]$ pwd
 2 /app/ansible_info
 3 [yun@ansi-manager ansible_info]$ cat hosts_key 
 4 # 未分組機器,放在所有組前面
 5 # 預設埠22,可省略
 6 # 方式1、主機 + 埠 + 密鑰
 7 172.16.1.180:22
 8 
 9 # 方式2:主機 + 埠 + 密鑰
10 [proxyservers]
11 172.16.1.18[1:2]:22
12 
13 # 方式3:別名 + 主機 + 埠 + 密碼
14 [webservers]
15 web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22
16 web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22
17 web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22

測驗連接

測驗一

1 [yun@ansi-manager ansible_info]$ ansible 172.16.1.180 -m ping -i ./hosts_key 
2 172.16.1.180 | SUCCESS => {
3     "ansible_facts": {
4         "discovered_interpreter_python": "/usr/bin/python"
5     }, 
6     "changed": false, 
7     "ping": "pong"
8 }

測驗二

 1 [yun@ansi-manager ansible_info]$ ansible proxyservers -m ping -i ./hosts_key 
 2 172.16.1.181 | SUCCESS => {
 3     "ansible_facts": {
 4         "discovered_interpreter_python": "/usr/bin/python"
 5     }, 
 6     "changed": false, 
 7     "ping": "pong"
 8 }
 9 172.16.1.182 | SUCCESS => {
10     "ansible_facts": {
11         "discovered_interpreter_python": "/usr/bin/python"
12     }, 
13     "changed": false, 
14     "ping": "pong"
15 }

測驗三

 1 [yun@ansi-manager ansible_info]$ ansible webservers -m ping -i ./hosts_key 
 2 web03 | SUCCESS => {
 3     "ansible_facts": {
 4         "discovered_interpreter_python": "/usr/bin/python"
 5     }, 
 6     "changed": false, 
 7     "ping": "pong"
 8 }
 9 web01 | SUCCESS => {
10     "ansible_facts": {
11         "discovered_interpreter_python": "/usr/bin/python"
12     }, 
13     "changed": false, 
14     "ping": "pong"
15 }
16 web02 | SUCCESS => {
17     "ansible_facts": {
18         "discovered_interpreter_python": "/usr/bin/python"
19     }, 
20     "changed": false, 
21     "ping": "pong"
22 }

混合方式和主機組方式

清單配置

 1 [yun@ansi-manager ansible_info]$ pwd
 2 /app/ansible_info
 3 [yun@ansi-manager ansible_info]$ cat hosts_group 
 4 # 未分組機器,放在所有組前面
 5 # 預設埠22,可省略
 6 # 方式1、主機 + 埠 + 密鑰
 7 172.16.1.180
 8 
 9 # 方式一、主機組變數 + 主機 + 密碼
10 [proxyservers]
11 172.16.1.18[1:2] ansible_ssh_port=22 ansible_ssh_user=yun ansible_ssh_pass='123456'
12 
13 # 方式二、主機組變數 + 主機 + 密鑰
14 [webservers]
15 172.16.1.18[3:5]:22
16 
17 # 定義多組,多組彙總整合
18 # website 組包括兩個子組[proxyservers, webservers]
19 [website:children]
20 proxyservers
21 webservers

說明:定義多組使用沒有問題。但是不能像上面一樣既有密碼配置,又有秘鑰配置,這樣會增加維護成本。這裡為了演示因此用了密碼和秘鑰配置。

測驗連接

測驗一

 1 # 如果 ~/.ssh/known_hosts 文件中沒有添加受控機指紋,那麼必須提權操作
 2 [yun@ansi-manager ansible_info]$ sudo ansible proxyservers -m ping -i ./hosts_group --list-hosts
 3   hosts (2):
 4     172.16.1.181
 5     172.16.1.182
 6 [yun@ansi-manager ansible_info]$ sudo ansible proxyservers -m ping -i ./hosts_group   
 7 172.16.1.182 | SUCCESS => {
 8     "ansible_facts": {
 9         "discovered_interpreter_python": "/usr/bin/python"
10     }, 
11     "changed": false, 
12     "ping": "pong"
13 }
14 172.16.1.181 | SUCCESS => {
15     "ansible_facts": {
16         "discovered_interpreter_python": "/usr/bin/python"
17     }, 
18     "changed": false, 
19     "ping": "pong"
20 }

測驗二

1 [yun@ansi-manager ansible_info]$ ansible webservers -m ping -i ./hosts_group --list-hosts
2   hosts (3):
3     172.16.1.183
4     172.16.1.184
5     172.16.1.185
6 [yun@ansi-manager ansible_info]$ ansible webservers -m ping -i ./hosts_group 
7 ………………

測驗三

1 [yun@ansi-manager ansible_info]$ ansible website -m ping -i ./hosts_group --list-hosts
2   hosts (5):
3     172.16.1.181
4     172.16.1.182
5     172.16.1.183
6     172.16.1.184
7     172.16.1.185
8 [yun@ansi-manager ansible_info]$ ansible website -m ping -i ./hosts_group

測驗四

特殊組:all

1 [yun@ansi-manager ansible_info]$ ansible all -m ping -i ./hosts_group --list-hosts
2   hosts (6):
3     172.16.1.180
4     172.16.1.181
5     172.16.1.182
6     172.16.1.183
7     172.16.1.184
8     172.16.1.185
9 [yun@ansi-manager ansible_info]$ ansible all -m ping -i ./hosts_group

 


  

———END———
如果覺得不錯就關註下唄 (-^O^-) !

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 《框架設計 CLR Via C#》 (第2版) [作者] (美) Jeffrey Richter[譯者] (中) 周靖 張傑良[出版] 清華大學出版社[版次] 2006年11月 第1版[印次] 2007年02月 第2次 印刷[定價] 68.00元 【前言】 Microsoft .NET Framew ...
  • 一個非常輕量級的 Web API Demo,代碼量很少,實現了方法攔截器,token校驗,異常攔截器,緩存 創建項目:如果選擇Web API,項目中東西會比較多,這裡選擇Empty,把下麵的Web API勾上,MVC不要勾 項目目錄結構: Global.asax.cs代碼:這裡配置方法攔截器和異常攔 ...
  • ASP.NET WebAPI有兩種寄宿模式,一種是WebHost,一種是SelfHost,為什麼可以有兩種模式的原因在於WebAPI有一個相對獨立的消息處理管道,只要給這個消息管道傳遞一個封裝好的對象,便可以得到處理好的結果。而怎麼去封裝這個對象,如何得到這個對象就不是WebAPI所關心的了。在We... ...
  • 記錄什麼是托管代碼?學習過程。 托管代碼 C#,就是其中一種托管代碼。托管代碼的執行過程可以交由運行時管理,在.Net里,這種運行時稱為“公共語言運行時”(Common Language RunTime,CLR)。 托管代碼先經過編譯器編譯成“中間語言”代碼(Intermediate Languag ...
  • 我就直奔主題了。 我按照大的方向總結了一下: 學習習慣 按照自己的生活習慣,每天或者每周給自己安排學習時間,如果執行一段時間不能堅持,學習時間減半方法繼續執行。 註意:比學習更重要的是學習習慣。習慣練成了已經成功一半了。 學習方法 學習途徑有很多種,常用的有看書,看視頻,去培訓班,老師輔導。 怎樣提 ...
  • 我們可以在Github上面直接查看ASP.NET Core 3.x的源代碼,但是我們也可以把源代碼下載下來進行查看。 而下載源代碼進行查看有很多好處: 任意的導航源代碼 內置了一個示例項目 直接調試源代碼 下載源代碼 想下載並配置好源碼,你需要: 最新版的Visual Studio 或者其它IDE ...
  • 前言 Identity Server4基於OAuth2.0協議的一套用於身份認證和授權的框架。OAuth2.0協議是一個委托協議,通過這個協議,我們可以讓某個客戶端頂著一個有資源訪問許可權的身份去訪問那些被保護的資源。授權的流程簡單概括起來,客戶端應用需要先去請求Identity Server4,如果 ...
  • 前要: 有一12年買的手提電腦,打算在其上直接裝linux部署分散式爬蟲順便學linux 唔,開機吧……然開機動畫沒有,只有間斷有序的悲鳴,一查,主板逝世 賣給收買舊電腦估計不到20…不能忍,想了想不如裝移動硬碟上做個mobile linux,OK,遂寫此篇 工具: 硬碟盒/移動硬碟、U盤、(環境w ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...