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

简介:

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


背景:

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

脚本开发思路:

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


相关文章
|
19天前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全方位实践
本文深入探讨了构建高效运维体系的关键要素,从监控、日志管理、自动化工具、容器化与微服务架构、持续集成与持续部署(CI/CD)、虚拟化与云计算以及安全与合规等方面进行了全面阐述。通过引入先进的技术和方法,结合实际案例和项目经验,为读者提供了一套完整的运维解决方案,旨在帮助企业提升运维效率,降低运营成本,确保业务稳定运行。
|
17天前
|
机器学习/深度学习 运维 Prometheus
构建高效运维体系:从自动化部署到智能监控的全方位实践
在当今数字化时代,企业对运维效率和稳定性的要求越来越高。本文将探讨如何构建一个高效的运维体系,从自动化部署、持续集成与持续交付(CI/CD)、智能监控、故障管理以及数据驱动决策等方面进行深入分析和实践指导。通过这些方法,企业可以实现更快速、更可靠的软件发布和问题解决,提升整体运营效率。
|
13天前
|
敏捷开发 运维 Prometheus
构建高效运维体系:从基础架构到自动化管理
本文探讨了如何通过优化基础架构、引入自动化工具和流程,以及加强团队协作,构建高效的运维体系。通过案例分析和实践建议,帮助运维人员实现系统的稳定性、可靠性和可维护性。
|
7天前
|
机器学习/深度学习 运维 Cloud Native
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为信息技术的重要支柱,其效率与创新能力直接关系到企业信息系统的稳定性和业务连续性。本文将探讨如何通过技术手段,实现运维从传统手工操作向自动化、智能化的转变,进而构建一个高效、可靠的运维体系。我们将从自动化工具的应用开始,逐步深入到智能运维的实践,最终展望云原生架构下的运维未来趋势。
|
9天前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行配置管理和任务自动化
【9月更文挑战第27天】在现代IT基础设施中,自动化运维是提高效率、减少人为错误和确保系统一致性的关键。本文将介绍如何使用Ansible,一个流行的开源IT自动化工具,来简化日常的运维任务。我们将探索Ansible的核心概念,包括它的架构、如何安装和使用它,以及一些实际的使用案例。无论你是新手还是有经验的运维专家,这篇文章都会提供有价值的见解和技巧,以帮助你更好地利用Ansible实现自动化。
|
8天前
|
运维 监控 关系型数据库
自动化运维:编写基本的自动化脚本
自动化运维:编写基本的自动化脚本
9 1
|
10天前
|
运维 Prometheus 监控
运维中的自动化工具与实践指南
本文深入探讨了自动化工具在IT运维中的重要性,提供了多种实用工具的推荐与应用实例。通过分析自动化工具如何提升运维效率、减少错误率,我们将揭示其在现代信息技术管理中的核心价值。无论你是IT新手还是经验丰富的专家,都能从中汲取到有益的知识,进而提升你的工作效果。
|
14天前
|
弹性计算 运维 监控
高效运维:从自动化到智能化
本文探讨了运维领域的发展历程,重点分析了自动化和智能化在提升运维效率和稳定性中的关键作用。通过对实际案例的剖析,展示了如何利用现代技术手段优化运维流程,并展望了未来运维的发展方向。
|
11天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为保障企业IT系统稳定运行的关键环节,正经历着前所未有的变革。本文将探讨如何通过实施自动化和引入智能化技术,构建一个更加高效、可靠的运维体系,以应对日益复杂的业务需求和技术挑战。
24 1
|
17天前
|
机器学习/深度学习 人工智能 运维
高效运维:从自动化到智能化的演进之路
在当今数字化时代,运维领域正经历着从人工到自动化,再向智能化迈进的深刻变革。本文将探讨自动化运维的实践方法、面临的挑战以及如何向智能化运维转型的策略,旨在为读者提供一条清晰的演进路径,帮助企业提升运维效率,降低风险,并最终实现价值最大化。

热门文章

最新文章

下一篇
无影云桌面