1. 程式人生 > >統計各節點ssh免密登錄授權信息

統計各節點ssh免密登錄授權信息

ansible

為了維護方便,生產環境ansible到其他所有節點所有賬號做了免密登錄,根據安全需求,現需要統計所有節點所有賬號的ssh免密登錄授權信息。為了省時省力,將以ansible+shell的形式實現,如下:

1、準備好ansible的hosts文件,根據賬號名稱分成多個組,其中root組包括所有節點的IP地址。

2、準備一個文件包括所有節點的IP地址

3、playbook文件,authfile.yml

---
- hosts: root
  gather_facts: false
  remote_user: root
  tasks:
    - name: cp root auth file
      shell: source ~/.bash_profile && source /etc/profile && mkdir -p /tmp/myauthdir && cp /root/.ssh/authorized_keys /tmp/myauthdir/`hostname`_root.txt
- hosts: sumapay
  gather_facts: false
  remote_user: root
  tasks:
    - name: cp sumapay auth file
      shell: source ~/.bash_profile && source /etc/profile && cp /home/sumapay/.ssh/authorized_keys /tmp/myauthdir/`hostname`_sumapay.txt
- hosts: sumapay25
  gather_facts: false
  remote_user: root
  tasks:
    - name: cp sumapay25 auth file
      shell: source ~/.bash_profile && source /etc/profile && cp /home/sumapay25/.ssh/authorized_keys /tmp/myauthdir/`hostname`_sumapay25.txt
- hosts: glassfish
  gather_facts: false
  remote_user: root
  tasks:
    - name: cp glassfish auth file
      shell: source ~/.bash_profile && source /etc/profile && cp /home/glassfish/.ssh/authorized_keys /tmp/myauthdir/`hostname`_glassfish.txt

4、shell腳本文件,authfile.sh

#!/bin/bash
#授權文件歸集目錄
authfile_dir="authfile"

#在各節點生成"主機名_用戶"格式的授權文件
ansible-playbook -i /etc/ansible/hosts authfile.yml 
#拷貝各節點生成後的授權文件
cpauthfile(){
if [[ ! -d $authfile_dir ]];then
    mkdir $authfile_dir
fi
for i in `cat ip.txt`
    do
        scp root@${i}:/tmp/myauthdir/* $authfile_dir
    done
}
#過濾個授權文件免密登錄主機,並生成列表
create_table(){
if [[ -s filename.txt ]];then
    echo > filename.txt
fi
for i in `ls $authfile_dir`
    do
        echo $i|awk -F "." '{print $1}' >> filename.txt
        cat $authfile_dir/$i|awk '{print $3}'|sort -u >> filename.txt
        echo "" >> filename.txt
    done
}
cpauthfile
create_table

5、執行authfile.sh,生成filename.txt文件,包含所有節點、所有用戶的ssh免密登錄授權信息。




統計各節點ssh免密登錄授權信息