自動化運維之批量修改主機名
背景:某行在一大資料專案中採購了一百多臺伺服器,客戶要求伺服器盡快上線,因數量較多,逐一手工登陸去修改,工作量很大,也是單調的機械勞動。鑑於此,使用指令碼進行批量更改。
指令碼開發思路:
考慮到在其中某一台機器上建立公鑰私鑰,把它的公鑰一次性拷貝給其他機器,從而建立這台機器到其他機器的授信,並且,為了保證這個過程的無須手工干預,需要用expect指令碼解決互動問題。
接著,使用expect指令碼與shell指令碼相結合的方式,對主機名字進行批量更改。為了永久修改,還需要修改其他機器的/etc/sysconfig/network 檔案中的hostname欄位的名稱,使其與剛剛用hostname修改的主機名一致。
指令碼開發步驟:
使用指令碼生成公鑰私鑰,指令碼如下:
#!/bin/bash
ssh-keygen -t rsa -p '' -f '/root/.ssh/id_rsa'
檢視下生成的公鑰私鑰,命令如下:
說明:逗號是為了使用 awk -f "," 也可以使用其他的分隔符。
下面的expect指令碼是用來拷貝公鑰到其他機器的,expect指令碼替我們處理了互動問題
[root@h3c kewai]# cat ssh-copy-id-batch.exp
#!/usr/bin/expect
set ip [lindex $ar** 0]
set timeout 60
set password "root"
spawn ssh-copy-id -i root@$ip
expect
"*password:"
expect eof
exit
通過下面的bash指令碼呼叫上面的expect指令碼,從而批量把公鑰拷貝給其他機器
[root@h3c kewai]# cat ssh-copy-id-batch.sh
#!/bin/bash
for i in $(awk '' /root/ip.txt)
doip=$(awk -v ip="$i" '' /root/ip.txt|awk -f"," '')
name=$(awk -v ip="$i" '' /root/ip.txt | awk -f"," '')
echo "name=$name"
echo $ip
expect ssh-copy-id-batch.exp $ip
done
說明:通過上面的操作,我們已經在這台機器到其他所有要改主機名的機器建立了授信,這樣,從這台機器登陸到其他機器就不需要密碼了。
使用expect指令碼去修改主機名
[root@h3c kewai]# cat modify-server-name.exp
#!/usr/bin/expect
set ip [lindex $ar** 0]
set name [lindex $ar** 1]
set timeout 60
spawn ssh $ip /bin/hostname $name
expect eof
exit
通過下面的指令碼去呼叫上面的expect指令碼就可以批量修改主機名了
[root@h3c kewai]# cat modify-server-name.sh
#!/bin/bash
for i in $(awk '' /root/ip.txt)
doip=$(awk -v ip="$i" '' /root/ip.txt|awk -f, '')
name=$(awk -v ip="$i" '' /root/ip.txt | awk -f, '')
expect modify-server-name.exp $ip $name
done
說明:因為hostname修改主機名是臨時的,因此,需要修改/etc/sysconfig/network裡面的hostname的值才能永久修改主機名,所以,我們繼續編寫指令碼去批量修改每個機器該檔案的hostname欄位的值。
使用指令碼修改主機名配置檔案
[root@h3c kewai]# cat modify-server-name.2.exp
#!/usr/bin/expect
set ip [lindex $ar** 0]
set name [lindex $ar** 1]
#set password "root"
set timeout 60
spawn ssh $ip /bin/sed -i 's/.*/hostname=$name/g' /etc/sysconfig/network
expect eof
exit
再通過下面的bash指令碼去呼叫上面的expect指令碼,就可以批量永久修改主機名了
[root@h3c kewai]# cat modify-server-name.2.sh
#!/bin/bash
for i in $(awk '' /root/ip.txt)
doip=$(awk -v ip="$i" '' /root/ip.txt|awk -f, '')
name=$(awk -v ip="$i" '' /root/ip.txt | awk -f, '')
expect modify-server-name.2.exp $ip $name
done
說明:expect指令碼與shell指令碼最好放在同乙個目錄下!如下:
為了方便使用,將指令碼進行整合,整合後的指令碼如下:
[root@h3c kewai]# cat plgm.sh
#!/bin/bash`
ssh-keygen -t rsa -p '' -f '/root/.ssh/id_rsa'
for i in $(awk '' /root/ip.txt)
doip=$(awk -v ip="$i" '' /root/ip.txt|awk -f"," '')
name=$(awk -v ip="$i" '' /root/ip.txt | awk -f"," '')
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指令碼最好放在同乙個目錄下(黃色部分)!如下:
Linux 運維 linux系統修改主機名
1 命名解釋 root localhost 分別代表 使用者名稱 root 主機名 localhost 當前路徑 當前使用者的home目錄 許可權標誌位 代表root,代表普通使用者 重新登入 shell 後可以看到已經生效 a 以 centos 系統為例,需要更改配置檔案生效,修改 etc sys...
Linux學習之修改主機名
顯示主機名 oracle localhost hostname localhost 修改主機名 oracle localhost sudo hostname orcl1 oracle localhost hostname orcl1 2.永久修改主機名 以上的修改只是臨時修改,重啟後就恢復原樣了。步...
Linux命令之修改主機名
ubuntu永久修改主機名 1 檢視主機名 在ubuntu系統中,快速檢視主機名有多種方法 其一,開啟乙個gnome終端視窗,在命令提示符中可以看到主機名,主機名通常位於 符號後 其二,在終端視窗中輸入命令 hostname或uname n,均可以檢視到當前主機的主機名。2 臨時修改主機名 命令列下...