欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux 命令expect使用詳解

 更新時(shí)間:2023年11月16日 14:46:58   作者:阿龍先生啊  
expect是由Don Libes基于Tcl語(yǔ)言開發(fā)的,是一種腳本語(yǔ)言,主要應(yīng)用于自動(dòng)化交互式操作的場(chǎng)景,借助Expect處理交互的命令,本文給大家介紹Linux 命令expect使用詳解,感興趣的朋友一起看看吧

一、概述

1.1 命令簡(jiǎn)介

expect 是由Don Libes基于Tcl(Tool Command Language )語(yǔ)言開發(fā)的,是一種腳本語(yǔ)言,主要應(yīng)用于自動(dòng)化交互式操作的場(chǎng)景,借助Expect處理交互的命令,可以將交互過程如:ssh登錄,ftp登錄等寫在一個(gè)腳本上,使之自動(dòng)化完成。尤其適用于需要對(duì)多臺(tái)服務(wù)器執(zhí)行相同操作的環(huán)境中,可以大大提高系統(tǒng)管理人員的工作效率。

1.2 使用場(chǎng)景

(1)根據(jù)預(yù)定標(biāo)準(zhǔn)回答其問題,回答“是”、“否”或?qū)⒖刂茩?quán)交還給您

(2)遠(yuǎn)程連接設(shè)備并執(zhí)行自動(dòng)化操作

(3)需要人機(jī)交互的地方,如果提前知道應(yīng)該輸入什么指令都可以使用expect 工具

1.3 expect命令安裝

yum install expect  -y

二、expect使用原理

2.1 命令原理介紹

spawn啟動(dòng)指定進(jìn)程—expect獲取指定關(guān)鍵字—send向指定程序發(fā)送指定字符—執(zhí)行完成退出

spawn命令

spawm命令就是用來(lái)啟動(dòng)新的進(jìn)程的。spawn后的send和expect命令都是和spawn打開的進(jìn)程進(jìn)行交互的、

send命令

send命令接收一個(gè)字符串參數(shù),并將該參數(shù)發(fā)送到進(jìn)程,這個(gè)過程類似模擬人類輸入密碼

interact命令

結(jié)合spawn、expect、send自動(dòng)化的完成很多任務(wù),interact命令可以在適當(dāng)?shù)臅r(shí)候進(jìn)行任務(wù)的干預(yù),比如下載完ftp文件時(shí),仍然可以停留在ftp命令行狀態(tài),以便手動(dòng)的執(zhí)行后續(xù)命令

三、expect使用語(yǔ)法

3.1 expect 啟用選項(xiàng)

  • -c 執(zhí)行腳本前先執(zhí)行的命令,可多次使用
  • -d debug模式,可以在運(yùn)行時(shí)輸出一些診斷信息,與在腳本開始處使用exp_internal 1相似。
  • -D 啟用交換調(diào)式器,可設(shè)一整數(shù)參數(shù)。
  • -f 從文件讀取命令,僅用于使用#!時(shí)。如果文件名為"-",則從stdin讀取(使用"./-"從文件名為-的文件讀取)。
  • -i 交互式輸入命令,使用"exit"或"EOF"退出輸入狀態(tài)
  • -- 標(biāo)示選項(xiàng)結(jié)束(如果你需要傳遞與expect選項(xiàng)相似的參數(shù)給腳本時(shí)),可放到#!行:#!/usr/bin/expect --
  • -v 顯示expect版本信息

3.2 expect命令參數(shù)

  • spawn: 交互程序開始,執(zhí)行后面的命令或程序。需要進(jìn)入到expect環(huán)境才可以執(zhí)行,不能直接在shell環(huán)境下直接執(zhí)行
  • set timeout n : 設(shè)置超時(shí)時(shí)間,表示該腳本代碼需在n秒鐘內(nèi)完成,如果超過,則退出。用來(lái)防止ssh遠(yuǎn)程主機(jī)網(wǎng)絡(luò)不可達(dá)時(shí)卡住及在遠(yuǎn)程主機(jī)執(zhí)行命令宕住。如果設(shè)置為-1表示不會(huì)超時(shí)
  • set: 定義變量
  • $argv expect腳本可以接受bash的外部傳參,可以使用[ lindex $argv n ]n為0表示第一個(gè)傳參,為1表示第二個(gè)傳參,以此類推
  • expect 從交互程序進(jìn)程中指定接收信息, 如果匹配成功, 就執(zhí)行send的指令交互;否則等待timeout秒后自動(dòng)退出expect語(yǔ)句
  • send 如果匹配到expect接受到的信息,就將send中的指令交互傳遞,執(zhí)行交互動(dòng)作。結(jié)尾處加上\r表示如果出現(xiàn)異常等待的狀態(tài)可以進(jìn)行核查
  • exp_continue 表示循環(huán)式匹配,通常匹配之后都會(huì)退出語(yǔ)句,但如果有exp_continue則可以不斷循環(huán)匹配,輸入多條命令,簡(jiǎn)化寫法。
  • exit 退出expect腳本
  • expect eof: spawn進(jìn)程結(jié)束后會(huì)向expect發(fā)送eof,接收到eof代表該進(jìn)程結(jié)束
  • interact 執(zhí)行完代碼后保持交互狀態(tài),將控制權(quán)交給用戶。沒有該命令執(zhí)行完后自動(dòng)退出而不是留在遠(yuǎn)程終端上
  • puts 輸出變量

四、實(shí)戰(zhàn)案例

4.1 登錄遠(yuǎn)程服務(wù)器并在遠(yuǎn)程服務(wù)器上執(zhí)行命令

#!/usr/bin/expect
spawn ssh root@192.168.2.161 df -h
expect "*password:"
send "winner@001\n"
expect eof

執(zhí)行結(jié)果如下圖: 

4.2 本機(jī)免密實(shí)現(xiàn)

#! /bin/bash
#
# Author: kangll
# CreateTime: 2023-11-10
# Desc: 基礎(chǔ)環(huán)境配置,包括服務(wù)器設(shè)置,JDK,免密,kerberos配置
# 可擴(kuò)展到批量操作 
#
#set -x
BASEDIR=$(cd "$(dirname "$0")"; pwd)
# 加載配置
source  $BASEDIR/config/global.sh
ssh_networkname=(windp-aio)
ssh_passwd=winner@#2023
########################
# 生成本地ssh公鑰
########################
create_ssh_pub(){
	echo "生成本地ssh公鑰"
	/usr/bin/expect << eof
	# 設(shè)置捕獲字符串后,期待回復(fù)的超時(shí)時(shí)間
	set timeout 30
	# 執(zhí)行命令開啟一個(gè)新的進(jìn)程
	spawn ssh-keygen -t rsa -b 1024
	## 開始進(jìn)連續(xù)捕獲
	expect	{
		".ssh/id_rsa)"      { send "\n";  exp_continue }
		"Overwrite (y/n)?"  { send "y\n"; exp_continue }
		"no passphrase):"   { send "\n";  exp_continue }
		"passphrase again:" { send "\n";  exp_continue }
	}
eof
}
########################
# 定義復(fù)制ssh公鑰方法
########################
copy_ssh(){
  if [ ! -f /root/.ssh/id_rsa.pub ];then
       create_ssh_pub
  fi
	echo "復(fù)制公鑰到對(duì)應(yīng)的主機(jī)上"
	/usr/bin/expect << eof
	# 設(shè)置捕獲字符串后,期待回復(fù)的超時(shí)時(shí)間
	set timeout 30
	# 命令執(zhí)行
	spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $1@$2
	## 開始進(jìn)連續(xù)捕獲
	expect	{
		"connecting (yes/no)?" { send "yes\n";  exp_continue }
		"s password:"          { send "${ssh_passwd}\n"; exp_continue }
	}
eof
}
########################
# 配置免密
########################
config_ssh() {
    # 主機(jī)遍歷
	for name in ${ssh_networkname[*]};do
		timeout 5 ssh root@${name} "echo ${name}: 'This is success!'"
		if [[ $? -ne 0 ]];then
			echo "復(fù)制文件到: ${name}"
			copy_ssh root ${name} > /dev/null
		fi
	done
        echo "********** ssh installation completed **********"
}
# 配置root用戶免密 
config_ssh

4.3 自動(dòng)生成kerberos用戶的keytab認(rèn)證文件

#! /bin/bash
#
# Author: kangll
# CreateTime: 2023-11-10
# Desc: 基礎(chǔ)環(huán)境配置,包括服務(wù)器設(shè)置,JDK,免密,kerberos配置
# 可擴(kuò)展到批量操作 
#
# public 主機(jī)名和root密碼 
ip=$(ip addr show | grep -E 'inet [0-9]' | awk '{print $2}' | awk -F '/' '{print $1}' | sed -n '$p')
ssh_hosts=${ip}
ssh_networkname=(windp-aio)
# global.sh 配置文件中獲取
ssh_passwd=$root_passwd
ssh_passwd=winner@#2023
kerberos_user=winner_spark
##################################
# 配置kerberos用戶: winner_spark 
# 生成keytab 文件
##################################
config_kerberos_user() {
        echo "******** 創(chuàng)建winner_spark用戶實(shí)例 ********"
        /usr/bin/expect << eof
        # 設(shè)置捕獲字符串后,期待回復(fù)的超時(shí)時(shí)間
        set timeout 30
        # 登錄
        spawn kadmin.local 
        ## 開始進(jìn)連續(xù)捕獲,添加用戶
        expect  {
                "kadmin.local:"    { send "addprinc ${kerberos_user}\n"; exp_continue }
                "Enter password for principal"    { send "${ssh_passwd}\n"; exp_continue }
                "Re-enter password for principal" { send "${ssh_passwd}\n"; }
        }
       expect "kadmin.local:"    { send "quit\r";  }
eof
       echo "******** winner_spark用戶生成keytab文件 ********"
        /usr/bin/expect << eof
        # 設(shè)置捕獲字符串后,期待回復(fù)的超時(shí)時(shí)間
        set timeout 30
        spawn kadmin.local 
        ## 開始進(jìn)連續(xù)捕獲,生成keytab file
        expect  {
                "kadmin.local:" { send "xst -k /etc/security/keytabs/${kerberos_user}.keytab ${kerberos_user}@WINNER.COM\n";  }
        }
       expect "kadmin.local:"    { send "quit\r";  }
eof
       # modify keytab file privilege    
       chown ${kerberos_user}:hadoop /etc/security/keytabs/${kerberos_user}.keytab
       echo "********** kerberos user winner_spark add completed **********"
}
# 配置kerberos,并啟動(dòng)
#config_krb5
# 配置kerberos用戶: winner_spark, 生成keytab 文件
config_kerberos_user

到此這篇關(guān)于Linux 命令expect使用詳解的文章就介紹到這了,更多相關(guān)Linux expect使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Linux中退出編輯模式的命令

    詳解Linux中退出編輯模式的命令

    這篇文章主要介紹了Linux中退出編輯模式的命令,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • 一文詳解Linux權(quán)限的相關(guān)知識(shí)

    一文詳解Linux權(quán)限的相關(guān)知識(shí)

    Linux權(quán)限是用來(lái)管理文件和目錄訪問權(quán)限的機(jī)制,每個(gè)文件和目錄都有一個(gè)所有者和一個(gè)所屬組,同時(shí)也有針對(duì)所有者、所屬組和其他用戶的權(quán)限設(shè)置,本篇文章將講授Linux的權(quán)限相關(guān)的知識(shí),需要的朋友可以參考下
    2023-09-09
  • linux下mysql如何自動(dòng)備份shell腳本

    linux下mysql如何自動(dòng)備份shell腳本

    對(duì)任何一個(gè)已經(jīng)上線的網(wǎng)站站點(diǎn)來(lái)說(shuō),數(shù)據(jù)備份都是必須的。無(wú)論版本更新還是服務(wù)器遷移,備份數(shù)據(jù)的重要性不言而喻。人工備份數(shù)據(jù)的方式不單耗費(fèi)大量時(shí)間和精力,還灰常不專業(yè)。下面小編給大家分享linux下mysql自動(dòng)備份shell腳本,需要的朋友可以參考下
    2015-09-09
  • Shell中select in的具體使用

    Shell中select in的具體使用

    本文主要介紹了Shell中select in的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • linux下保留文件系統(tǒng)下剩余指定數(shù)目文件的shell腳本

    linux下保留文件系統(tǒng)下剩余指定數(shù)目文件的shell腳本

    本文介紹下,用于保留文件系統(tǒng)下剩余指定數(shù)量的文件的一個(gè)shell腳本,感興趣的朋友可以參考下
    2013-11-11
  • 自動(dòng)化下載并檢測(cè)ftp文件備份的shell腳本

    自動(dòng)化下載并檢測(cè)ftp文件備份的shell腳本

    這篇文章主要介紹了自動(dòng)化下載并檢測(cè)ftp文件備份的shell腳本,需要的朋友可以參考下
    2016-08-08
  • Bash中數(shù)組的操作教程

    Bash中數(shù)組的操作教程

    這篇文章主要介紹了Bash數(shù)組操,包括定義數(shù)組、讀取數(shù)組、修改數(shù)組以及數(shù)組循環(huán),文中通過示例代碼給出了詳細(xì)的介紹,有需要的朋友可以參考下,下面來(lái)一起看看吧。
    2016-12-12
  • shell中if test使用詳解

    shell中if test使用詳解

    本文主要介紹了shell中if test使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Linux 下的 unzip 命令使用示例詳解

    Linux 下的 unzip 命令使用示例詳解

    Unzip 是一個(gè)在 Unix 或類 Unix 系統(tǒng)(例如 Linux)中常用的命令行工具,用于解壓縮由 ZIP 壓縮算法創(chuàng)建的壓縮文件,本文給大家介紹Linux 下的 unzip 命令使用示例詳解,感興趣的朋友一起看看吧
    2023-11-11
  • Shell腳本實(shí)現(xiàn)自動(dòng)修改IP地址

    Shell腳本實(shí)現(xiàn)自動(dòng)修改IP地址

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)自動(dòng)修改IP地址,本文直接給出實(shí)現(xiàn)代碼,并在代碼中標(biāo)注大量注釋,需要的朋友可以參考下
    2014-10-10

最新評(píng)論