天天看點

expect人機互動完成軟體自動安裝腳本開發

expect使用介紹

  • 使用場景介紹

    假如公司有N個節點的叢集,

    甚至更過,需要我們每台機器都安裝jdk,

    我們需要對N台節點批量自動下載下傳安裝

    如果我們一台一台的安裝會不會累死?

    對于一個開發人員,這樣的事情是不允許的。

  • expect的使用

    如果想達到以上的需求,

    那麼問題來了,如果遠端scp,是避免不了手動輸入密碼的。

    主角expect閃亮登場。

    自動化互動工具,幫助我們實作人機互動

  • expect的安裝
安裝就不多說
yum list | grep expect檢視yum源
然後yum安裝即可,也可以源碼安裝
           

expect結合shell腳本開發完成批量安裝jdk

  • expect的初步使用
免密登入的初步配置。
    場景:
    當我登入lijian使用者到linux系統,然後我需要su root到超級管理者下。
    這就需要輸入密碼。編寫腳本test.sh來進行免密登入
      
expect人機互動完成軟體自動安裝腳本開發

編寫腳本

#!/usr/bin/expect
 set timeout 
 spawn su
 expect "密碼:"

 send "xxxxxxxx\r"
 interact
           

執行腳本

expect test.sh

expect人機互動完成軟體自動安裝腳本開發

這樣我們完成了切換root使用者的免密登入

  • expect編寫免密腳本達到N個節點的叢集jdk的統一安裝

    (1)編寫腳本 baseboot.sh

#!/bin/bash
SERVERS="39.104.110.102 39.104.161.1"
PASSWORD=
BASE_SERVER=.

#配置所有機器免密登入執行方法
login_ssh-copy_id(){
    expect -c "set timeout -1;
        spawn   ssh-copy-id $1;
        expect {
            "(yes/no)" {send -- yes\r;exp_continue;}    
            "password" {send -- $2\r;exp_continue;}
        }";


}
#周遊所有的機器進行免密登入
ssh_copy_id_to_host() {

    for SERVER in $SERVERS
    do
        login_ssh-copy_id $SERVER $PASSWORD
    done

}

ssh_copy_id_to_host
#遠端拷貝腳本到機器上然後運作批處理
for SERVER in $SERVERS
do
    scp /alidata/shell/install.sh [email protected]$SERVER:/alidata/shell
    ssh [email protected]$SERVER /alidata/shell/install.sh
done
           

編寫安裝jdk的install.sh腳本,如果有規定的統一目錄,腳本自動改進,或涉及到權限問題,自動加入。

#!/bin/bash

BASE_SERVER=/alidata/server

#先安裝wget才能下載下傳jdk
yum -y install wget

#下載下傳jdk
wget http://download.oracle.com/otn-pub/java/jdk/u171-b11/cd62ec5174c3487ac17c61aaa89e8/jdk-u171-linux-x64.tar.gz

#安裝jdk
tar -zxvf jdk-u171-linux-x64.tar.gz -C $BASE_SERVER -O > jdk1.

#配置環境變量到/etc/profile
cat >> /etc/profile << E
export JAVA_HOME=$BASE_SERVER/jdk1.
export PATH=\$PATH:\$JAVA_HOME/bin
E 
           
注意:别忘記對每個檔案及檔案夾賦予對應的權限,cp腳本要有執行權限,如果出錯
            檢查權限
            檢查權限
            檢查權限
            重要的東西說三遍
    
      

繼續閱讀