ansible 相互間免密登入
ansible是一個配置管理系統,可以用來自動化處理叢集間批量重複性任務,常用來安裝部署hadoop、spark、es等大資料工具,但是在運用它之前需要保證各個機器之間相互可以免密登入,也就是可以使用ssh不用密碼可以登入到任何一臺機器上。
免密安裝機器
172.18.18.120
172.18.18.121
172.18.18.122
-
線上安裝ansible
yum -y install ansible
-
配置所有免密機器使用者名稱及密碼
cat /etc/ansible/hosts
[ssh]
172.18.18.120 ansible_ssh_user=root ansible_ssh_pass=123456
172.18.18.121 ansible_ssh_user=root ansible_ssh_pass=123456
172.18.18.122 ansible_ssh_user=root ansible_ssh_pass=123456
-
編寫執行命令
cat /opt/ansible/sshKey.yml
- hosts: ssh
gather_facts:no
tasks:- name: set env #關閉關閉公鑰認證
lineinfile: dest=/etc/profile insertafter="{{item.position}}" line="{{item.value}}" state=present
with_items:
- {position: EOF, value: "\n"}
- {position: EOF, value: "export ANSIBLE_HOST_KEY_CHECKING=False"}
run_once: true
- name: enforce env#重新整理環境變數
shell: source /etc/profile
run_once: true
- name: close ssh check #關閉初次ssh詢問
shell: sed -i "s/^.*StrictHostKeyChecking.*$/ StrictHostKeyChecking no/g" /etc/ssh/ssh_config
- name: delete /root/.ssh/ #刪除歷史公鑰
file: path=/root/.ssh/ state=absent
- name: generating public/private rsa key pair #使用ssh-key產生公鑰和私鑰
shell: ssh-keygen -t rsa -b 2048 -N '' -f /root/.ssh/id_rsa
- name: delete /tmp/ssh/ #刪除臨時公鑰目錄
file: path=/tmp/ssh/ state=absent
run_once: true
- name: fetch copy #將其它機器公鑰拷貝到本機
fetch: src=/root/.ssh/id_rsa.pub dest=/tmp/ssh/
- name: append file authorized_keys.log #公鑰拼接成一個檔案
shell: find /tmp/ssh/* -type f -exec sh -c 'cat {}>>/tmp/ssh/authorized_keys.log' \;
run_once: true
- name: copy authorized_keys #將處理好的公鑰分發給各個機器上
copy: src=/tmp/ssh/authorized_keys.log dest=/root/.ssh/authorized_keys mode=0600
-
免密執行安裝
ansible-playbook /opt/ansible/sshKey.yml