背景:
某行在一大數據專案中採購了一百多臺伺服器,客戶要求伺服器儘快上線,因數量較多,逐一手工登陸去修改,工作量很大,也是單調的機械勞動。鑑於此,使用指令碼進行批次更改。
指令碼開發思路:
考慮到在其中某一臺機器上建立公鑰私鑰,把它的公鑰一次性拷貝給其他機器,從而建立這臺機器到其他機器的授信,並且,爲了保證這個過程的無須手工幹預,需要用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 {