linux改计算机名脚本,利用expect脚本结合bash脚本批量修改主机名

需要批量修改一批主机名,若数量很大,比如几十台,上百台,逐一手工登陆去修改,工作量很大,也是单调的机械劳动。

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

接着,在从上面建立了公钥私钥的那台机器依次登陆其他机器,登陆到其他机器后,执行hostname命令,修改主机名,还是要利用脚本,去修改登陆之后的机器的主机名。

为了永久修改,还需要修改其他机器的/etc/sysconfig/network 文件中的HOSTNAME字段的名称,使其与刚刚用hostname修改的主机名一致。

以上是所有脚本按逻辑顺序执行的目的。

下面贴出所有脚本。#下面这个脚本是自动生成公钥私钥的,无须人工干预按回车确认每个步骤

cat gen-sshkey.sh

#!/bin/bash

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

再把需要修改的机器的IP地址全部列在一个文本文件里,待会要用到cat iplist.txt

192.168.2.29

192.168.2.30

192.168.2.31

192.168.2.32

192.168.2.33

192.168.2.34

192.168.2.35

192.168.2.39

192.168.2.41

192.168.2.42

下面的expect脚本是用来拷贝公钥到其他机器的,expect脚本替我们处理了交互问题cat ssh-copy-id-batch.exp

#!/usr/bin/expect

set ip [lindex $argv 0]

set timeout 60

set password "abc123456"

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

expect {

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

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

}

expect eof

exit

通过下面的bash脚本调用上面的expect脚本,从而批量把公钥拷贝给其他机器cat ssh-copy-id-batch.sh

#!/bin/bash

for i in $(awk '{print $1}' iplist.txt)

do

ip=$(awk -v IP="$i" '{if(IP==$1) print $1}' iplist.txt)

name=$(awk -v IP="$i" '{if(IP==$1) print $1}' iplist.txt | awk -F[.] '{print $4}')

#echo "name=$name"

#echo $ip

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

done

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

下面,再用expect脚本去修改主机名

cat modify-more-server-name.exp

#!/usr/bin/expect

set ip [lindex $argv 0]

set name [lindex $argv 1]

set timeout 60

set password "abc123456"

spawn ssh $ip /bin/hostname ${name}-".linux.net

expect eof

exit

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

cat modify-more-server-name.sh

#!/bin/bash

for i in $(awk '{print $1}' iplist.txt)

do

ip=$(awk -v IP=$i '{if(IP==$1)print $1}' iplist.txt)

name=$(awk -v IP="$i" '{if(IP==$1) print $1}' iplist.txt | awk -F[.] '{print $4}')

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

done

因为hostname修改主机名是临时的,因此,需要修改/etc/sysconfig/network里面的HOSTNAME的值才能永久修改主机名,所以,我们继续编写脚本去批量修改每个机器该文件的HOSTNAME字段的值cat modify-more-server-name-file.exp

#!/usr/bin/expect

set ip [lindex $argv 0]

set name [lindex $argv 1]

set timeout 60

set password "xinhuanet"

spawn ssh $ip /bin/sed -i 's/^.*net.*$/HOSTNAME=${name}-.linux.net/' /etc/sysconfig/network

expect eof

exit

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

cat modify-more-server-name-file.sh

#!/bin/bash

for i in $(awk '{print $1}' iplist.txt)

do

ip=$(awk -v IP=$i '{if(IP==$1)print $1}' iplist.txt)

name=$(awk -v IP="$i" '{if(IP==$1) print $1}' iplist.txt | awk -F[.] '{print $4}')

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

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值