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

2021-09-21 04:52:24 字數 3684 閱讀 5851

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

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

指令碼開發思路:

考慮到在其中某一台機器上建立公鑰私鑰,把它的公鑰一次性拷貝給其他機器,從而建立這台機器到其他機器的授信,並且,為了保證這個過程的無須手工干預,需要用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 臨時修改主機名 命令列下...