ansible批量免密
阿新 • • 發佈:2018-12-12
Ansible免密登入
主要是ansible服務端需要將/root/.ssh/id_rsa.pub分發到其他伺服器
有兩個命令比較重要
ssh-keygen :這個命令是用來生成本機的公鑰和私鑰的
ssh-keyscan : 這條命令是用來把遠端伺服器的公鑰來獲取到本地的
- 1
- 2
(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
- 1
- 2
- 直接設定環境變數
命令為:
export ANSIBLE_HOST_KEY_CHECKING=False
-
(2)使用ssh-key產生公鑰和私鑰
[[email protected] ansible]# ssh-keygen -t rsa -b 2048 -P ” -f /root/.ssh/id_rsa
(3)新增主機資訊到hosts檔案中
[[email protected] ansible]# pwd /etc/ansible [[email protected] 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語言編寫的
[[email protected] 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