DevOps課程-Configuration Management with Ansible 6
如前一篇的經驗,我有一台沒有用SSH連線過
當再執行ansible指令要對該機台下命令的時候
會有問SSH連線的yes or no
如果DigitalOcean上建了10台
然後一開始跑個ansible指令時,yes就要打10遍...
這邊就可以學一下如何管理SSH Key Check
這邊因應後面需求,先把id_rsa.pub也擺上Ansible主控機
基本上會有兩種考量:
- 長期Target機台("long-lived" Servers)
- 動態建置或短期的機台("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
接著我們在開心的一台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
再來另一招則是不推薦的 →
Disable Host Key Checking
如前面提到,這可能是根據流量動態建置/移除的機台
或是很臨時性建立的測試機,跑完就移除
這邊先移除前面那兩個新增的機台:
然後再建一個新機台,並且是用ssh key的設置:
至於如何設定不要檢核,則是要寫Ansible設定檔
在講師的Ansible版本的設定檔並不存在於預設目錄:
/etc/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指令就會有作用(這邊我就沒試過)