linux Ansible 自動輸入密碼登錄

一直想做Ansible自動化,於是就查看ansible的官網和加入各種ansible羣, 但是發現都是吹水的,於是就百度,google.

我心中的自動期望ansible可以做到執行下面的命令即可完成自動任務.

 ansible-playbook -i hosts task.ym

最初始想完成這個是使用一個shell腳本, 在腳本中使用ansible-playbook和使用expect獲取提示自動輸入密碼, 但是總感覺太臃腫. 所以找到以下方法:

1階段:使用腳本獲取提示輸入密碼;

2階段:在ansible的inventory中添加內置參數,遇到使用密碼+密鑰無法登錄問題,解決這個問題;

 

以下是2階段遇到問題和解決問題的過程:

一般情況和自己測試場景還是有些小不同. 例如在登錄認證這塊. 

ssh登錄一般有: 密碼,密鑰, 密鑰+密碼 三種. 

測試時使用密碼或者單密鑰據多, 當遇到密鑰+密碼時可能就會有些不一樣的地方了. 

單使用密碼時: 

可以直接在ansible 的inventory裏面加入

[group]

192.168.1.1 ansible_password=PASSWORD

[group:vars]

ansible_password=PASSWORD

使用這種方式需要安裝另外一個工具 sshpass, 使用 yum install -y sshpass 或者 源碼安裝(noted:如果沒有找到合適的yum源)

我是在這裏找到sshpass工具

單使用密鑰時: 

使用密鑰時只需要將ansible_password 改爲  ansible_ssh_private_key_file 即可. 

使用密碼+密鑰時:

如果單純的將 ansible_password 和 ansible_ssh_private_key_file 加入 inventory中, 在執行命令時會卡着沒有任何提示, 即使在ansible-playbook命令後加 "-vvv" 也看不到爲什麼卡着. 

但是執行sshpass命令之後可能你就會發現問題了. (noted:執行sshpass命令時加上 -v參數), 默認情況下使用的是普通的ssh client, 在使用sshpass是提示"passphrase", 但是sshpass的默認prompt是要匹配"assword". 所以在使用sshpass時會出現類似expcet工具沒有匹配到目標而等待. 

在網上找到使用paramiko作爲ssh連接client則可以完美運行. 

在inventory中加上下面的內容即可

ansible_password=PASSWORD
ansible_ssh_private_key_file=PATH_KEYFILE
ansible_connection=paramiko

不過官網也有解決文檔:(noted:但是沒有發現sshpass時不知道可以用paramiko)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章