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

简介:

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


背景:

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

脚本开发思路:

 考虑到在其中某一台机器上建立公钥私钥,把它的公钥一次性拷贝给其他机器,从而建立这台机器到其他机器的授信,并且,为了保证这个过程的无须手工干预,需要用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

    wKioL1mX9P_zR3EjAAAhG7VhvJg190.png

  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脚本最好放在同一个目录下!如下:

    wKioL1mYAwHhY5thAAA58QEchgs762.png

  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脚本最好放在同一个目录下(黄色部分)!如下:

    wKioL1mYCMOgnKVdAABBxH1FGw4312.png




     本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/1957642,如需转载请自行联系原作者


相关文章
|
5月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
112 4
|
2月前
|
监控 运维
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
本文介绍如何设置和查看域名或证书监控。步骤1:根据证书状态选择新增域名或证书监控,线上部署推荐域名监控,未部署选择证书监控。步骤2:查询监控记录详情。步骤3:在详情页查看每日定时检测结果或手动测试。
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
|
2月前
|
Linux 持续交付 调度
HTTPS 证书自动化运维:https证书管理系统-自动化部署
本指南介绍如何部署Linux服务器节点。首先复制生成的Linux脚本命令,然后将其粘贴到目标服务器上运行。接着刷新页面查看节点记录,并点击“配置证书”选择证书以自动部署。最后,节点部署完成,后续将自动调度,无需人工干预。
HTTPS 证书自动化运维:https证书管理系统-自动化部署
|
2月前
|
运维
HTTPS 证书自动化运维:https证书管理系统之自动化签发
通过访问【https://www.lingyanspace.com】注册账户,进入证书服务菜单并新增证书。填写域名(单域名、多域名或泛域名),创建订单后添加云解析DNS记录进行质检。确认完成后可下载证书,并支持后续查看、更新和定时更新功能。证书过期前15天自动更新,需配置邮箱接收通知。
HTTPS 证书自动化运维:https证书管理系统之自动化签发
|
9天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化服务器管理:解锁运维的未来
基于AI的自动化服务器管理:解锁运维的未来
54 0
|
2月前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
133 11
|
2月前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
633 22
|
2月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
94 9
|
4月前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
4月前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
204 1

热门文章

最新文章