DevOps課程-Configuration Management with Ansible 6

Managing Host Key Checking and SSH Key

ZONGRU Li
Mar 30, 2022

如前一篇的經驗,我有一台沒有用SSH連線過

當再執行ansible指令要對該機台下命令的時候

會有問SSH連線的yes or no

如果DigitalOcean上建了10台

然後一開始跑個ansible指令時,yes就要打10遍...

這邊就可以學一下如何管理SSH Key Check

這邊因應後面需求,先把id_rsa.pub也擺上Ansible主控機

基本上會有兩種考量:

  1. 長期Target機台("long-lived" Servers)
  2. 動態建置或短期的機台("ephemeral" or "temporary" Servers)

1.長期Target機台(“long-lived” Server)

簡單作法就是一台台先SSH連過

但是實際背後的運作,可以透過以下流程及指令來理解

首先又在於DigitalOcean上建立新機台:

其他設定不異動

一樣防火牆加一下:

正常來說SSH雖說是單向,但是SSH連線後兩邊要能互相認得彼此

連線的機台會產生一個檔案叫做:

~/.ssh/know_hosts

其記錄了被連線的機台的訊息:

不用SSH連線後打yes的方式,提早將被連線機台資訊寫到know_hosts

可以透過以下指令事先寫入被連機台資訊:

#事先寫入被連機台資訊指令:
ssh-keyscan -H {被連機台IP} >> ~/.ssh/known_hosts
#這邊就是:
ssh-keyscan -H 128.199.248.20 >> ~/.ssh/known_hosts

然後對於被連線機台來說,事先要有id_rsa.pub這個公鑰檔資訊

也就是流程中的這一步:

這邊其實已經可以嘗試用Ansible主控機台去連這個新Target機台

#並且可以在這個被連線的機台上找到id_rsa.pub的資訊在:
cat ~/.ssh/authorized_keys
內容其實就是id_rsa.pub

接著我們在開心的一台DigitalOcean的Droplet機台,這次改用帳號密碼的

規格同上面剛剛建立的,唯獨:

然後在Ansible主控機做一樣動作,先把新的被連機台資訊加到~/.ssh/authorized_keys

然後執行ssh連線,這邊就還要敲密碼了:

但是被連線機台的~/.ssh/authorized_keys是空的:

所以總是要敲密碼,雖然不用敲yes or no

回到Ansible主控機

將預設位置的公鑰資訊寫到被連機台的authorized_keys檔案內:

#透過指令將預設位置的~/.ssh/id_rsa.pub資訊
#寫入到被連機台~/.ssh/authorized_keys
ssh-copy-id {帳號}@{IP}
#也就是:
ssh-copy-id root@159.65.138.156

之後重新用ssh連過去就不用在敲密碼了:

這邊回到主控機,將上面兩台新的機台也加進hosts設定檔內:

此時再執行absible指令:

#執行absible指令:
ansible droplet -i hosts -m ping
沒有任何一台再問yes or no

再來另一招則是不推薦的 →

Disable Host Key Checking

如前面提到,這可能是根據流量動態建置/移除的機台

或是很臨時性建立的測試機,跑完就移除

這邊先移除前面那兩個新增的機台:

然後再建一個新機台,並且是用ssh key的設置:

至於如何設定不要檢核,則是要寫Ansible設定檔

在講師的Ansible版本的設定檔並不存在於預設目錄:

/etc/ansible

但是我用的版本看起來有...

就是Ansible主控機上的這個檔

沒有的話在自己建就好

也可以建在~/.ansible.cfg

這邊就直接編輯我有的設定檔:

進去後有發現是read only,所以有調整一下:

#增加當前User的修改權限:
sudo chmod u+x /etc/ansible/ansible.cfg

然後發現還是鎖死不給改,所以直接用sudo vim去調整

並填入以下內容:

藍字是預設有的

然後調整一下hosts檔:

移除掉剛剛已經消滅的兩個機台IP,新增剛剛加入的機台IP

嘗試執行ansible指令看看會不會有yes or no要填

#執行Ansible指令:
ansible droplet -i hosts -m ping

而這個ansible.cfg檔案也可以放置於Ansible的專案目錄內使用

就直接在Ansible的專案目錄內建立這個名稱檔案即可!

而在該目錄執行Ansible指令就會有作用(這邊我就沒試過)

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet