博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动化运维之批量修改主机名
阅读量:6239 次
发布时间:2019-06-22

本文共 3212 字,大约阅读时间需要 10 分钟。

自动化运维之批量修改主机名

背景:

 某行在一大数据项目中采购了一百多台服务器,客户要求服务器尽快上线,因数量较多,逐一手工登陆去修改,工作量很大,也是单调的机械劳动。鉴于此,使用脚本进行批量更改。

脚本开发思路:

 考虑到在其中某一台机器上建立公钥私钥,把它的公钥一次性拷贝给其他机器,从而建立这台机器到其他机器的授信,并且,为了保证这个过程的无须手工干预,需要用expect脚本解决交互问题。

 接着,使用expect脚本与shell脚本相结合的方式,对主机名字进行批量更改。为了永久修改,还需要修改其他机器的/etc/sysconfig/network 文件中的HOSTNAME字段的名称,使其与刚刚用hostname修改的主机名一致。

脚本开发步骤:

  1. 使用脚本生成公钥私钥,脚本如下:

    #!/bin/bash

    ssh-keygen  -t  rsa   -P ''   -f   '/root/.ssh/id_rsa'

    查看下生成的公钥私钥,命令如下:

    [root@h3c .ssh]# cd /root/.ssh && ll

  2. 建立一个存有ip地址与主机名对应的文件,内容如下:

    [root@h3c kewai]# cat /root/ip.txt

    192.168.100.113,topcheer

    192.168.100.114,huawei

    说明:逗号是为了使用 awk -F "," 也可以使用其他的分隔符。

  3. 下面的expect脚本是用来拷贝公钥到其他机器的,expect脚本替我们处理了交互问题

    [root@h3c kewai]# cat ssh-copy-id-batch.exp

    #!/usr/bin/expect

    set ip [lindex $argv 0]

    set timeout 60

    set password  "root"

    spawn ssh-copy-id   -i   root@$ip

    expect {

    "yes/no"  {exp_send "yes\r";exp_continue}

    "*password:" {exp_send  "$password\r"}

    }

    expect eof

    exit

  4. 通过下面的bash脚本调用上面的expect脚本,从而批量把公钥拷贝给其他机器

    [root@h3c kewai]# cat ssh-copy-id-batch.sh

    #!/bin/bash

    for i in $(awk '{print $1}'  /root/ip.txt)

    do

    ip=$(awk -v  IP="$i" '{if(IP==$1) print $1}' /root/ip.txt|awk -F"," '{print $1}')

    name=$(awk  -v  IP="$i"  '{if(IP==$1) print $1}'  /root/ip.txt | awk -F"," '{print $2}')

    echo "name=$name"

    echo $ip

    expect ssh-copy-id-batch.exp $ip

    done

    说明:通过上面的操作,我们已经在这台机器到其他所有要改主机名的机器建立了授信,这样,从这台机器登陆到其他机器就不需要密码了。

  5. 使用expect脚本去修改主机名

    [root@h3c kewai]# cat modify-server-name.exp

    #!/usr/bin/expect

    set ip [lindex $argv 0]

    set name [lindex $argv 1]

    set timeout 60

    spawn  ssh $ip  /bin/hostname $name

    expect eof

    exit

  6. 通过下面的脚本去调用上面的expect脚本就可以批量修改主机名了

    [root@h3c kewai]# cat modify-server-name.sh

    #!/bin/bash

    for i in  $(awk  '{print $1}' /root/ip.txt)

    do

    ip=$(awk -v  IP="$i" '{if(IP==$1) print $1}' /root/ip.txt|awk -F, '{print $1}')

    name=$(awk  -v  IP="$i"  '{if(IP==$1) print $1}'  /root/ip.txt | awk -F, '{print $2}')

    expect  modify-server-name.exp  $ip $name

    done

    说明:因为hostname修改主机名是临时的,因此,需要修改/etc/sysconfig/network里面的HOSTNAME的值才能永久修改主机名,所以,我们继续编写脚本去批量修改每个机器该文件的HOSTNAME字段的值。

  7. 使用脚本修改主机名配置文件

    [root@h3c kewai]# cat modify-server-name.2.exp

    #!/usr/bin/expect

    set ip [lindex $argv 0]

    set name [lindex $argv 1]

    #set password "root"

    set timeout 60

    spawn  ssh $ip  /bin/sed -i 's/.*/HOSTNAME=$name/g' /etc/sysconfig/network

    expect eof

    exit

  8. 再通过下面的bash脚本去调用上面的expect脚本,就可以批量永久修改主机名了

    [root@h3c kewai]# cat modify-server-name.2.sh

    #!/bin/bash

    for i in  $(awk  '{print $1}' /root/ip.txt)

    do

    ip=$(awk -v  IP="$i" '{if(IP==$1) print $1}' /root/ip.txt|awk -F, '{print $1}')

    name=$(awk  -v  IP="$i"  '{if(IP==$1) print $1}'  /root/ip.txt | awk -F, '{print $2}')

    expect  modify-server-name.2.exp  $ip $name

    done

    说明:expect脚本与shell脚本最好放在同一个目录下!如下:

  9. 为了方便使用,将脚本进行整合,整合后的脚本如下:

    [root@h3c kewai]# cat plgm.sh

    #!/bin/bash`

    ssh-keygen  -t  rsa   -P ''   -f   '/root/.ssh/id_rsa'

    for i in $(awk '{print $1}'  /root/ip.txt)

    do

    ip=$(awk -v  IP="$i" '{if(IP==$1) print $1}' /root/ip.txt|awk -F"," '{print $1}')

    name=$(awk  -v  IP="$i"  '{if(IP==$1) print $1}'  /root/ip.txt | awk -F"," '{print $2}')

    echo "name=$name"

    echo $ip

    expect ssh-copy-id-batch.exp $ip

    expect  modify-server-name.exp  $ip $name

    expect  modify-server-name.2.exp  $ip $name

    done

    说明:expect脚本与shell脚本最好放在同一个目录下(黄色部分)!如下:

     本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/1957642,如需转载请自行联系原作者
你可能感兴趣的文章
amazeui 移动开发
查看>>
python2 与python3中最大的区别(编码问题bytes&str
查看>>
HDU 2243 AC自动机+DP+矩阵
查看>>
什么叫脱字符合^
查看>>
git版本控制管理实践-2
查看>>
HTTP基础知识(三)
查看>>
如何有效释放DB2所占的磁盘空间?
查看>>
三分法
查看>>
第 8 章 容器网络 - 058 - flannel 概述
查看>>
Mongodb删除collection
查看>>
ArcEngine应用程序中无法实现TOC图层多选
查看>>
Java-笔记9-复习
查看>>
python---基本数据结构
查看>>
Windows下JDK,Tomcat,Eclipse安装配置
查看>>
vue的checkbox或多选的select的代码例子
查看>>
es6-Set和Map数据结构
查看>>
使用ffmpeg将录屏文件转换成gif
查看>>
作业七 总结
查看>>
Oracle的静默安装 升级和卸载 参考规范
查看>>
高效存储过程分页
查看>>