一共三步,创建密钥,分发公钥,开始连接。

1、ssh-keygen -t rsa  (ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '') 这种就没有提示,直接创建。

2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.19.42

3、ssh 192.168.19.42 (也可以在后面加命令,例如 ls hostname等等 )

 

接着第一步无提示创建密钥后,然后实现无yes或no直接分发公钥。

sshpass -p\iso9001 ssh-copy-id -oStrictHostKeyChecking=no root@192.168.19.48

 

#!/bin/bash
#author :david.z
#version: v1
#desc: 一键创建密钥对 分发密钥对

#1.vars
pass=\iso9001
ips="192.168.19.48 192.168.19.42 192.168.19.37 192.168.19.45 192.168.19.39 192.168.19.40 192.168.19.43 192.168.19.51"
. /etc/init.d/functions

#1.4 判断是否联网或是否可以使用yum
#1.5 加入判断sshpass命令是否存在,如果不存在则安装

#2.创建密钥对

if [ -f ~/.ssh/id_rsa ] ;then
    echo "已经创建过密钥对"
else
    echo "正在创建密钥对。。。"  
    ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
    if [ $? -eq 0 ];then
        action "密钥创建成功" /bin/true
    else
        action "密钥创建失败" /bin/false
    fi
fi

#3.通过循环分发公钥
for ip in $ips
do
   sshpass -p${pass} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/null

   if [ $? -eq 0 ];then
        action "$ip 公钥分发成功" /bin/true

   else
        action "$ip 公钥分发失败" /bin/false
   fi
   #echo "$ip 密钥已经发送"
done

上面为一键分发密钥脚本。可以自动分发密钥,同时多台分发公钥。

如下效果显示。

ansible 自动化工具  open ssh手动创建公钥密钥_密钥对

 

 自动化管理工具 ansible.

 

ansible 自动化工具  open ssh手动创建公钥密钥_密钥对_02

 安装  yum install -y ansible

修改配置文件。

[root@dgp-KMS scripts]# egrep -v '^$|#' /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False
log_path = /var/log/ansible.log
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

 

修改默认分组文件。

vim /etc/ansible/hosts 

ansible 自动化工具  open ssh手动创建公钥密钥_配置文件_03

 

试一下ping,绿色代表正常,红色或者紫色代表异常。

ansible 自动化工具  open ssh手动创建公钥密钥_密钥对_04

 

ansible 自动化工具  open ssh手动创建公钥密钥_密钥对_05

 如何创建data组包含已有的组呢?

ansible 自动化工具  open ssh手动创建公钥密钥_客户端_06

 单独试一下data组的ping

ansible 自动化工具  open ssh手动创建公钥密钥_配置文件_07

 

ansible 自动化工具  open ssh手动创建公钥密钥_客户端_08

 安装好了ansible之后,然后就是做主机列表。

做好了主机列表,然后要学会ansible的模块,一共有很多种模块,要学很久的,学好了模块就可以做剧本了。

这里放一个我做的NFS自动化部署的剧本。

首先要在ansible上 建立主机列表,首先自己建立一个playbook的目录,然后把剧本yml和主机表放在里面。如图

ansible 自动化工具  open ssh手动创建公钥密钥_客户端_09

 

ansible 自动化工具  open ssh手动创建公钥密钥_密钥对_10

 

然后就可以在里面写剧本了。 我一共写了4个剧本,全部分享出来。

第一个是测试剧本。

---
- hosts: web 
  tasks:
    - name: 01 打开冰箱门
      shell: echo 01 >>/tmp/bingxiang/log

    - name: 02 把大象放入冰箱
      shell: echo 02 >>/tmp/bingxiang/log

    - name: 03 关上冰箱的门
      shell: echo 03 >>/tmp/bingxiang/log

 第二个.

- hosts: web
  tasks:
    - name: 01 创建目录
      file:
        path: /server/files/
        state: directory
    
    - name: 02 分发文件
      copy:
        src: /etc/hosts
        dest: /server/files/

  

第三个。这个是批量安装zabbix客户端agent.

- hosts: web
  tasks:
     - name: 01. 下载软件包
       get_url:
         url: "https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.7-1.el7.x86_64.rpm"
         validate_certs: no
         dest: /tmp/
     - name: 02. 安装软件包
       yum:
         name: /tmp/zabbix-agent-6.0.7-1.el7.x86_64.rpm
         state: present
     - name: 03. 配置
       debug:
         msg: "进行配置zabbix-agent"
     - name: 04. 启动
       systemd:
         name: zabbix-agent
         enabled: yes
         state: started

第四个,重点,自动部署NFS服务器和客户端。而且同时部署两台NFS服务器。

#nfs服务端部署
- hosts : nfs
  tasks:
   - name: 01. 部署nfs-utils,rpcbind
     yum:
       name: nfs-utils,rpcbind
       state: present
       
   - name: 02. 修改配置文件
     lineinfile: 
       path: /etc/exports
       line: "/backup-nfs 192.168.19.0/24(rw,all_squash)"
       create: true
   - name: 03. 创建共享目录并改所有者
     file: 
       path: /backup-nfs
       owner: nfsnobody
       group: nfsnobody
       state: directory

   - name: 04-1. 启动服务rpcbind,nfs(注意顺序)
     systemd:
       name: rpcbind
       enabled: yes
       state: started
   - name: 04-2. 启动服务rpcbind,nfs(注意顺序)
     systemd:
       name: nfs 
       enabled: yes
       state: started

#nfs客户端部署
- hosts: web
  tasks:
   - name: 01. 部署nfs-utils
     yum:
       name: nfs-utils
       state: present
   - name: 02. 挂载nfs
     mount:
       src: 192.168.19.48:/backup-nfs
       path: /ans-upload
       state: mounted 
       fstype: nfs

   - name: 03. 挂载nfs
     mount:
       src: 192.168.19.51:/backup-nfs
       path: /ans-upload2
       state: mounted 
       fstype: nfs

  

 

 

排除#号显示ansible配置文件。

ansible 自动化工具  open ssh手动创建公钥密钥_客户端_11