Ansible免密登錄


Ansible實踐篇(一):Ansible免密登錄

主要是ansible服務端需要將/root/.ssh/id_rsa.pub分發到其他服務器

有兩個命令比較重要

ssh-keygen :這個命令是用來生成本機的公鑰和私鑰的
ssh-keyscan : 這條命令是用來把遠程服務器的公鑰來獲取到本地的

(1)首先關閉公鑰認證

如果說不想關閉公鑰認證的話,可以用ssh-keycan 命令將公鑰添加到本地的known_hosts文件里面去
具體命令是ssh-keyscan IP1 (IP2 ...) >> /root/.ssh/known_hosts 可以添加多個

Ansible1.2.1及其之后的版本都會默認啟用公鑰認證.

公鑰認證就是如果之后的某一台客戶端和之前登錄過的某一台主機IP相同,那么在“known_hosts”中有了不同的key,這時會提示一個錯誤信息直到被糾正為止。
在使用Ansible時,可能不想遇到那樣的情況,如果有個主機沒有在“known_hosts”中被初始化將會導致在交互使用Ansible或定時執行Ansible時對key信息的確認提示。如果想要禁用這個行為的話,可以關閉公鑰認證,而且公鑰認證會比較慢,也是提高效率的一個方法


關閉公鑰認證的方法有兩種:
- 編輯ansible.cfg配置文件

[defaults]
host_key_checking = False
  • 直接設置環境變量
命令為:
export ANSIBLE_HOST_KEY_CHECKING=False

(2)使用ssh-key產生公鑰和私鑰

[root@localhost ansible]# ssh-keygen -t rsa -b 2048 -P ” -f /root/.ssh/id_rsa

(3)添加主機信息到hosts文件中

[root@localhost ansible]# pwd
/etc/ansible
[root@localhost ansible]# vim hosts
[db]
172.25.70.1 ansible_ssh_user="root" ansible_ssh_pass="redhat"
172.25.70.2 ansible_ssh_user="root" ansible_ssh_pass="redhat"

##如果用戶名和密碼都相同的話也可以不用添加,在執行第5步的時候加上-u和-k就可以了

(4)編寫Playbook劇本文件

##是基於YAML語言編寫的

[root@localhost ansible]# vim ssh.yml
# ssh-addkey.yml ---
- hosts: all
 gather_facts: no

 tasks:

 - name: install ssh key
 authorized_key: user=root
 key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" 
 state=present

(5)運行playbook文件

[root@localhost ansible]# ansible-playbook -i hosts ssh.yml
這里寫圖片描述

(6)測試

此時運用模塊或者直接ssh登錄主機都不需要密碼
這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM