zoukankan      html  css  js  c++  java
  • shell批量推送公钥脚本

    写一个脚本,将跳板机上yunwei用户的公钥推送到局域网内可以ping通的所有机器上

    说明:主机和密码文件已经提供

    #!/bin/env bash
    #判断公钥是否存在
    [ ! -f /home/yunwei/.ssh/id_rsa ] && ssh-keygen -P '' -f ~/.ssh/id_rsa
    #循环判断主机是否ping通,如果ping通推送公钥
    ip=/home/yunwei/ip.txt
    for i in `cat $ip`
    do
        ip=`echo $i|cut -d: -f1`
        pass=`echo $i|cut -d: -f2`
        ping -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
            echo $ip >> /home/yunwei/ipup.txt
    	expect <<-EOF &>/dev/null
    	spawn ssh-copy-id root@$ip
            expect {
                   "yes/no" { send "yes
    ";exp_continue }
     	       "password" { send "${pass}
    " }
               }
    	expect eof
    	EOF
        else 
            echo $ip >> /home/yunwei/ipdown.txt
    fi
    done
    wait
    echo "公钥已经推送完毕,正在测试...."
    remote_ip=`tail -1 /home/yunwei/ipup.txt`
    ssh root@$remote_ip hostname &>/dev/null
    test $? -eq 0 && echo "公钥成功推送完毕"
    

    写法二,支持并发

    #!/bin/bash
    #判断公钥是否存在
    [ ! -f /home/yunwei/.ssh/id_rsa ] && ssh-keygen -P '' -f ~/.ssh/id_rsa
    
    #循环判断主机是否ping通,如果ping通推送公钥
    tr ':' ' ' < /home/yunwei/ip.txt|while read ip pass
    do
    {
            ping -c1 $ip &>/dev/null
            if [ $? -eq 0 ];then
            echo $ip >> ~/ip_up.txt
            /usr/bin/expect <<-END &>/dev/null
             spawn ssh-copy-id root@$ip
             expect {
                    "yes/no" { send "yes
    ";exp_continue }
                    "password:" { send "$pass
    " }
                    }
            expect eof
            END
            fi
    }&
    done
    wait
    echo "公钥已经推送完毕,正在测试...."
    #测试验证
    remote_ip=`tail -1 ~/ip_up.txt`
    ssh root@$remote_ip hostname &>/dev/null
    test $? -eq 0 && echo "公钥成功推送完毕"
    
  • 相关阅读:
    1219 总结
    1206 冲刺三
    1130 冲刺2
    1128 主页面
    1123 冲刺3
    1121 冲刺2
    1118 冲刺1
    1117 新冲刺
    0622 软件工程总结
    0617 实验四 主存空间的分配和回收
  • 原文地址:https://www.cnblogs.com/caidingyu/p/14053874.html
Copyright © 2011-2022 走看看