zoukankan      html  css  js  c++  java
  • ansible 自动ssh

    http://szgb2016.blog.51cto.com/340201/1669731

    安装

    yum -y install ansible expect

    生成key,ssh-keygen -t rsa -f ~/.ssh/id_rsa

    两种办法

    1. ssh+expect 出自oldbody

    cat /etc/ansible/hosts

    [web]

    web1  ansible_ssh_host=192.168.1.21

    web2  ansible_ssh_host=192.168.1.22

    提供修改的exp.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    /etc/init.d/functions
    ip=$1
    function KNOWN_HOST_REBUILD()
    {
    [ ! -e ~/.ssh/known_hosts ] && mkdir -p ~/.ssh/ && touch ~/.ssh/known_hosts
    local i=$1
    sed -i "/^${i} /d" ~/.ssh/known_hosts
    expect -c "
    spawn /usr/bin/ssh root@${i} echo ok;
    expect "*yes/no)?";
    send "yes ";
    expect eof " 
    return 0
    [[ $? -ne 0 ]] && echo "$i know host rebuild fail,maybe the server connect error"
    }
    function PASS_PASSWD()
    {
    ip=$1
    expect -c "
    set timeout -1
    spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip
    expect "*password:"
    send "你的密码 "
    expect eof" 
    }
    KNOWN_HOST_REBUILD $1
    PASS_PASSWD $1

    使用方法:./exp.sh ip,就会自动建立ssh了,然后ansible各种命令测试

    2.authorized_key模块

    分两步走

    1.known_host

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /etc/init.d/functions
    ip=$1
    function KNOWN_HOST_REBUILD()
    {
    [ ! -e ~/.ssh/known_hosts ] && mkdir -p ~/.ssh/ && touch ~/.ssh/known_hosts
    local i=$1
    sed -i "/^${i} /d" ~/.ssh/known_hosts
    expect -c "
    spawn /usr/bin/ssh root@${i} echo ok;
    expect "*yes/no)?";
    send "yes ";
    expect "*?assword:*"
    send -- "03 "
    expect eof " 
    return 0
    [[ $? -ne 0 ]] && echo "$i know host rebuild fail,maybe the server connect error"
    }
    KNOWN_HOST_REBUILD $1

    2.编写简单的yml

    基础资料

    http://docs.ansible.com/authorized_key_module.html

    简单例子

    1
    2
    # Example using key data from a local file on the management machine
    - authorized_key: user=charlie key="{{ lookup('file', '/home/charlie/.ssh/id_rsa.pub') }}"

    cat /etc/ansible/hosts

    [unknow]

    web3 ansible_ssh_user=root ansible_ssh_host=192.168.1.21 ansible_ssh_pass="你的密码"

    简单的使用

    1
    2
    3
    4
    5
    6
    7
    cat rsync_key.ymal
    --- 
    - hosts: web3
      user: root
      tasks:
      - name: ssh
        authorized_key: user="root" key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"

    使用方法:ansible-playbook rsync_key.ymal

    出自马哥 

    http://mageedu.blog.51cto.com/4265610/1412028

    authorized_key ymal格式不会写,Google到的

    (Ansible Cookbook 2014) http://ansiblecookbook.com/html/en.html

    网上的例子

    第一种方式:手动安装
    cd ~/Downloads
    curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz
    tar xvzf sshpass-1.05.tar.gz
    cd sshpass-1.05
    ./configure
    make
    sudo make install
    ```
    第二种方式,安装Mac os包管理器之外第三方包
    brew install https://raw.github.com/eugeneoden/homebrew/eca9de1/Library/Formula/sshpass.rb

    3.配置文件

    /etc/ansible/hosts — 默认资源文件
    /usr/share/ansible/ — 默认模块库
    /etc/ansible/ansible.cfg — 默认配置文件
    ~/.ansible.cfg — 用户配置文件,如果使用优先级高于ansible.cfg配置文件

    具体配置文件参考:http://docs.ansible.com/intro_configuration.html#pipelining

    step2:远程执行命令

    ansible是基于ssh协议之上进行远程管理,所以无须安装客户端,直接只要能ssh连接过去,就可以进行管理了

    1.配置管理客户端和秘钥登录

    cp hosts hosts.bak
    vim hosts
    
    [test]          //group_name,名称可以自定义,可以将不同的作用的机器放在不同的组里
    192.168.122.134
    192.168.122.131
    
    [test]
    192.168.122.134 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=skstserver
    
    #ssh无秘钥登录ssh-keygen -t rsa -P ''ssh-copy-id -i .ssh/id_rsa.pub root@192.168.122.131

    2、批量发送公钥

    ansible开始管理节点传递公钥
    如果是可以直接使用root的环境,则直接使用这个脚本

    vim tra_pub.exp

    #!/usr/bin/expect -f
    set timeout -1
    set user root
    set passwd "123456"
    
    for { set i 201 } { $i < 208 } { incr i } {
        spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@192.168.1.$i
        expect {
            "yes/no" { send "yes
    ";exp_continue }
            "id_rsa" { send "yes
    ";exp_continue }
            "*assword" { send "$passwd
    " }
        }
    }
    expect eof

    如果需要使用普通用户进行切换的环境则可以使用以下的脚本

    #!/usr/bin/expect -f
    set timeout -1
    set user test
    set passwd "123456"
    
    for { set i 100 } { $i < 120 } { incr i } {
        spawn ssh -l $user 172.41.30.$i
        expect {
            "yes/no" { send "yes
    ";exp_continue }
            "id_rsa" { send "yes
    ";exp_continue }
            "*assword" { send "$passwd
    " ;exp_continue }
            "test@" {
            send "sudo su -
    "
            expect {
                "password for test" { send "$passwd
    ";exp_continue }
                }
            }
        }
    }
    expect eof
    exit 0

    3、批量定义inventory

    直接利用for循环进行批量的写入

    for i in $(seq 200 240);do echo 192.168.1.$i >> /etc/ansible/hosts;done
    在尝试学习新的语言之前先理解这门语言的设计原理能够让你在探索这门新语言时保持一个清醒而且开发的状态。
  • 相关阅读:
    Select For Update使用场景   
    数据库的ACID特性
    Zookeeper和Eureka的区别
    SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
    如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?
    如何理解Hibernate的延迟加载机制?在实际应用中,延迟加载与Session关闭的矛盾是如何处理的?
    延迟加载与session关闭的矛盾一般可以这样处理:
    举一个多对多关联的例子,并说明如何实现多对多关联映射。
    java的基本操作和基本知识技能
    HTML基础
  • 原文地址:https://www.cnblogs.com/jackchen001/p/6428914.html
Copyright © 2011-2022 走看看