自動化運維之批次修改主機名

2020-08-12 21:18:38

自動化運維之批次修改主機名

背景:

某行在一大數據專案中採購了一百多臺伺服器,客戶要求伺服器儘快上線,因數量較多,逐一手工登陸去修改,工作量很大,也是單調的機械勞動。鑑於此,使用指令碼進行批次更改。
指令碼開發思路:

考慮到在其中某一臺機器上建立公鑰私鑰,把它的公鑰一次性拷貝給其他機器,從而建立這臺機器到其他機器的授信,並且,爲了保證這個過程的無須手工幹預,需要用expect指令碼解決互動問題。

接着,使用expect指令碼與shell指令碼相結合的方式,對主機名字進行批次更改。爲了永久修改,還需要修改其他機器的/etc/sysconfig/network 檔案中的HOSTNAME欄位的名稱,使其與剛剛用hostname修改的主機名一致。

指令碼開發步驟:

使用指令碼生成公鑰私鑰,指令碼如下:
#!/bin/bash
ssh-keygen  -t  rsa   -P ''   -f   '/root/.ssh/id_rsa'
檢視下生成的公鑰私鑰,命令如下:
[root@h3c .ssh]# cd /root/.ssh && ll

建立一個存有ip地址與主機名對應的檔案,內容如下:

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

192.168.100.113,topcheer

192.168.100.114,huawei

說明:逗號是爲了使用 awk -F 「,」 也可以使用其他的分隔符。

下面 下麪的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 {