1. 程式人生 > >ansible批量免密

ansible批量免密

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