天天看點

expect腳本遠端管理伺服器

實作目标:

   通過一台機器(暫且叫管理端伺服器)運作腳本,自動登入遠端多台用戶端,并 運 行腳本或指令。

環境需求:

1.各個機器都要開通NFS,并挂載管理端伺服器共享出的統一共享盤。

2.各個機器都要開通ssh服務。

3.腳本放在共享的目錄裡。

4.網絡通暢,遠端嘛,這是必須的了,呵呵。

腳本運作過程:

在管理伺服器上運作expect.sh,自動調用main.sh ,然後再調用monitor_fcs.sh。說明:monitor_fcs.sh是收集用戶端機器資訊的,類似收集資訊的腳本統一寫進main.sh裡,統一調用。

以下是腳本具體内容,用時根據實情做下客戶化就可以了,我這裡是在AIX系統裡寫的,收集光纖卡資訊的。經測試linux下也能用,monitor_fs.sh要根據自己的機器情況修改。

[root@localhost testexpect]# cat expect.sh

#!/usr/bin/expect

set timeout 300

# 替換你自己的使用者名

set user "root"

#替換你自己的登入密碼

set password "root"

# IP位址清單

set ip_addrs [list  192.168.227.128 192.168.227.130]

foreach IP  $ip_addrs {

spawn  ssh $user@$IP

expect {

  "(yes/no)?" { send "yes\r";exp_send continue }

  "password:" { send "$password\r";exp_send continue }

}

expect "#"

# 替換你要執行的指令

send "sh /sharebin/main.sh\r"

sleep 5

send "exit\r"

[root@localhost testexpect]# cat main.sh

#!/bin/ksh

path=$PATH

export path

workdir=/sharebin

if [ ! -d $workdir ]

then

echo "$workdir not exist."

else

cd $workdir

fi

/sharebin/monitor_fcs.sh >>monitor_fcs_log_`date +\%F`.log 2>&1

[root@localhost testexpect]# cat monitor_fcs.sh

host=`hostname`

#echo " Hostname         Hardware ID             Hardware Location               Hardware WWN            Status"

echo " "

 fcs=`lsdev -C | grep fcs|awk '{ print $1 }'`

 for i in $fcs

   do

        code=`lscfg | grep $i|awk '{ print $3 }'`

        Networkadd=`lscfg -vl $i|grep Network|sed 's/\.\{8,\}/ /'|awk ' { print $3 }'`

        fcstat -d $i >/dev/null 2>&1

      if [ $? -eq 0 ]

       then

      stat='N'

       else

       stat='Y'

      fi

      echo "$host\t\t$i\t\t$code\t\t$Networkadd\t$stat"

   done

還有一種實作方式是不用expect,因為這樣有明文密碼,不安全。隻使用ssh實作。不過要做public-key驗證,要不然每登入一台機器都要手動輸入密碼。用ssh的話把上文的expect.sh内容改成如下内容,其他不變,然後寫一個IP 的清單檔案,把要登入的IP都寫進去就好了,就是下文的ip_list.txt. 腳本内容如下:

user=root

echo " Hostname         Hardware ID             Hardware Location               Hardware WWN            Status" >>monitor_fcs_log_`date +\%F`.log 2>&1

echo "==================================================================================================================" >>monitor_fcs_log_`date +\%F`.log 2>&1

for i in  `cat ip_list.txt`

         do

           ssh $i "/sharebin/main.sh"

        done

[root@localhost testexpect]# cat ip_list.txt

192.168.227.128

192.168.227.129

192.168.227.130

192.168.227.131

繼續閱讀