2015-08-30 14 views
77

有沒有辦法忽略Ansible所做的SSH真實性檢查?例如,當我剛剛建立一個新的服務器我已經是這個問題的答案:如何忽略有效的SSH真實性檢查?

GATHERING FACTS *************************************************************** 
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. 
RSA key fingerprint is xx:yy:zz:.... 
Are you sure you want to continue connecting (yes/no)? 

我知道,這通常是一個壞主意,但我在第一次創建一個新的腳本將這一我的雲提供商的虛擬服務器,然後自動調用我的可靠的劇本來配置它。我想在腳本執行過程中避免任何人爲干預。

回答

117

兩個選擇 - 第一,當你在你自己的答案說,是設置環境變量ANSIBLE_HOST_KEY_CHECKING爲False。

設置它的第二種方法是將它放在ansible.cfg文件中,這是一個非常有用的選項,因爲您可以全局設置(在系統或用戶級別,在/etc/ansible/ansible.cfg~/.ansible.cfg中)或在配置文件與您正在運行的手冊相同的目錄中。

要做到這一點,讓一個ansible.cfg文件在這些地點之一,包括這個:

[defaults] 
host_key_checking = False 

您也可以設置很多其他方便的違約出現,如是否要在收集事實開始播放,是否合併在多個地方聲明的散列或者將散列與另一個替換,等等。 Ansible文檔中有一整套選項here


編輯:安全說明。

SSH主機密鑰驗證是一個有意義的安全層永久主機 - 如果您多次連接到同一臺計算機,在本地接受主機密鑰很有價值。

對於壽命更長的EC2實例,這將是有意義的接受與初始創建的實例運行的任務只有一次主機密鑰:

- name: Write the new ec2 instance host key to known hosts 
    connection: local 
    shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts" 

有檢查主機密鑰沒有安全值在動態站起來並在劇本執行後立即刪除的實例上,但在檢查持久計算機的主機密鑰方面有安全價值。所以你應該在不同的邏輯環境下管理主機密鑰檢查。

  • 離開檢查默認情況下(在~/.ansible.cfg
  • 禁用主機密鑰的工作目錄,你對短暫的情況下運行劇本檢查(./ansible.cfg啓用旁邊的劇本針對流浪者的虛擬機,自動化短暫的單元測試EC2實例)
+5

任何人都知道什麼是最好的做法嗎?例如,您可以定期運行一個腳本來重置您的已知主機,這會更安全(除非受到該窗口中的MITM攻擊)。默認情況下忽略真實性消除了SSH主要安全機制之一 – TonyH

+3

我喜歡我的團隊使用的模式:我們將禁用主機密鑰檢查的ansible.cfg文件放在我們針對短暫實例運行的劇本的工作目錄中(在流浪虛擬機上運行的單元測試,AWS ec2實例等),並在系統級別啓用檢查。 – nikobelia

+1

這樣,您可以管理主機密鑰檢查*每個邏輯環境*。對於在動態站起來並在劇本執行後立即刪除的實例檢查主機密鑰沒有安全價值,但在檢查持久計算機的主機密鑰時有安全價值。所以你應該對這些不同的用例有不同的默認值。 – nikobelia

17

我找到了答案,您需要將環境變量ANSIBLE_HOST_KEY_CHECKING設置爲False。例如:

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ... 
1

nikobelia

對於使用詹金斯運行遊戲書誰的,我只是說我詹金斯作業之前運行ansible-劇本的他的環境變量ANSIBLE_HOST_KEY_CHECKING =假 比如這個:

export ANSIBLE_HOST_KEY_CHECKING=False 
ansible-playbook 'playbook.yml' \ 
--extra-vars="some vars..." \ 
--tags="tags_name..." -vv