最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux自動(dòng)化交互腳本expect從安裝到開(kāi)發(fā)詳解

 更新時(shí)間:2024年06月29日 09:04:08   作者:IT后浪  
運(yùn)行shell腳本有時(shí)會(huì)提示輸入密碼,如何讓腳本自動(dòng)輸入密碼呢?這時(shí)使用expect,Expect是基于Tcl發(fā)展而來(lái)的,它不僅可以進(jìn)行交互,還可以根據(jù)程序的提示模擬標(biāo)準(zhǔn)輸入,實(shí)現(xiàn)自動(dòng)化交互執(zhí)行的功能,在排查expect腳本執(zhí)行問(wèn)題時(shí),應(yīng)關(guān)注腳本是如何被調(diào)用和執(zhí)行的

在日常開(kāi)發(fā)任務(wù)中,運(yùn)行shell腳本有時(shí)候會(huì)提示輸入密碼的操作,如何讓腳本自動(dòng)輸入密碼呢?這時(shí)使用expect幫我們輸入,Expect是基于Tcl發(fā)展而來(lái)的,它不僅可以進(jìn)行交互,還可以根據(jù)程序的提示模擬標(biāo)準(zhǔn)輸入,實(shí)現(xiàn)自動(dòng)化交互執(zhí)行的功能。

expect使用場(chǎng)景

文件傳輸

  • FTP/SFTP/SCP文件傳輸過(guò)程中,如果服務(wù)要求輸入用戶(hù)名、密碼或接受安全警告等交互操作,expect可以幫助自動(dòng)完成這些步驟。

SSH登錄自動(dòng)化

  • 當(dāng)需要自動(dòng)登錄遠(yuǎn)程服務(wù)器并執(zhí)行一系列命令時(shí),expect可以模擬用戶(hù)輸入密碼或通過(guò)密鑰認(rèn)證,并根據(jù)交互式提示繼續(xù)執(zhí)行。

sudo權(quán)限提升

  • 當(dāng)需要以root或其他用戶(hù)權(quán)限運(yùn)行命令,而系統(tǒng)配置為每次使用sudo都需要輸入密碼時(shí),可以通過(guò)expect預(yù)先輸入密碼并執(zhí)行后續(xù)命令。

數(shù)據(jù)庫(kù)操作

  • 在使用數(shù)據(jù)庫(kù)管理系統(tǒng)(如MySQL, PostgreSQL等)的命令行客戶(hù)端,在連接或執(zhí)行敏感操作時(shí)需要輸入密碼驗(yàn)證,expect腳本能實(shí)現(xiàn)這一過(guò)程的自動(dòng)化。

自動(dòng)安裝程序

  • 在安裝軟件包或運(yùn)行配置腳本的過(guò)程中,有些可能包含有交互式的問(wèn)答環(huán)節(jié),expect可用來(lái)自動(dòng)回答這些問(wèn)題,使得安裝或配置過(guò)程完全自動(dòng)化。

系統(tǒng)監(jiān)控任務(wù)

  • 在執(zhí)行緊急維護(hù)或故障恢復(fù)時(shí),可能涉及一系列復(fù)雜的手動(dòng)交互流程,通過(guò)expect編寫(xiě)自動(dòng)化腳本能夠減少人為干預(yù),提高效率和準(zhǔn)確性。

網(wǎng)絡(luò)設(shè)備管理

  • 對(duì)于路由器、交換機(jī)和其他網(wǎng)絡(luò)設(shè)備,很多管理界面都是基于文本協(xié)議(如telnet或SSH),expect可以用于自動(dòng)登錄設(shè)備并執(zhí)行配置更改等任務(wù)。

總之,任何需要在命令行環(huán)境中進(jìn)行人工交互的任務(wù),只要可以預(yù)測(cè)到交互的內(nèi)容,都可以嘗試使用expect來(lái)實(shí)現(xiàn)自動(dòng)化處理。

安裝expect

查看是否安裝了expect

whereis expect

如果出現(xiàn)如下提示,說(shuō)明未安裝

expect:[root@test ~]#

安裝expect

yum install -y expect

安裝成功提示

再次執(zhí)行whereis expect命令,如果出現(xiàn)如下提示,說(shuō)明安裝成功

expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz

編寫(xiě)sudo提權(quán)腳本

以下是一個(gè)基本的expect腳本示例,它會(huì)自動(dòng)為sudo命令提供密碼。

腳本內(nèi)容

#!/usr/bin/expect

# 設(shè)置超時(shí)時(shí)間(單位秒)
set timeout 10
# 設(shè)置你的密碼變量
set password "your_password_here"
# 執(zhí)行sudo命令,并監(jiān)視其輸出
spawn su root
# 當(dāng)提示符出現(xiàn)時(shí),發(fā)送密碼
expect "*Password:"
send "$password\r"
# 交互模式,等待命令執(zhí)行完成
interact

腳本解釋

  • spawn su root 是啟動(dòng)一個(gè)新的進(jìn)程來(lái)運(yùn)行su命令。
  • expect "*Password:" 等待包含"Password:"的提示符出現(xiàn)。
  • send "$password\r" 發(fā)送密碼變量值,并附帶回車(chē)符以確認(rèn)輸入。
  • interact 可以用來(lái)繼續(xù)監(jiān)控和處理命令行中的其他交互。

常用命令說(shuō)明

命令

說(shuō)明

set timeout n

設(shè)置expect語(yǔ)句超時(shí)時(shí)間為n秒。-1為永不超時(shí)

set name value

設(shè)置變量名為name,其值為value

set name [lindex $argv 0]

設(shè)置變量名為name,其值為 傳入 expect腳本的第一個(gè) 參數(shù) 。第一個(gè)參數(shù)的索引值為0,第二個(gè)為1,依次類(lèi)推

spawn

啟動(dòng)新的進(jìn)程,執(zhí)行命令或者指定程序

expect

接收進(jìn)程中返回的信息, 如果匹配成功(有大小寫(xiě)區(qū)分), 就執(zhí)行expect后的動(dòng)作

send

向進(jìn)程發(fā)送字符串

send_user

用來(lái)打印信息,相當(dāng)于shell中的echo

exp_continue

執(zhí)行完expect后的動(dòng)作后,使expect不退出,繼續(xù)往下匹配

expect eof

不允許用戶(hù)交互,直接退出(這個(gè)用的會(huì)比interact多)

interact

允許用戶(hù)交互

常見(jiàn)錯(cuò)誤

spawn: command not found

執(zhí)行編寫(xiě)好的expect腳本時(shí),報(bào)以下錯(cuò)誤信息,提示spawn: command not found,但通過(guò)rpm -qa | grep expect命令查看到expect軟件包的確安裝了,但是為什么仍然提示spawn命令找不到呢?

問(wèn)題排查

重新排查了報(bào)錯(cuò)的腳本,發(fā)現(xiàn)腳本的首行是#!/bin/sh ,把他改成#!/usr/bin/expect就可以了。

錯(cuò)誤的腳本如下:

#!/bin/sh

# 設(shè)置超時(shí)時(shí)間(單位秒)
set timeout 10
# 設(shè)置你的密碼變量
set password "your_password_here"
# 執(zhí)行sudo命令,并監(jiān)視其輸出
spawn su root
# 當(dāng)提示符出現(xiàn)時(shí),發(fā)送密碼
expect "*Password:"
send "$password\r"
# 交互模式,等待命令執(zhí)行完成
interact

問(wèn)題分析

在編寫(xiě)expect腳本時(shí),在文件的首行需要以#!/usr/bin/expect作為shebang(即解釋器指示符),目的是告訴操作系統(tǒng)應(yīng)當(dāng)使用expect解釋器來(lái)執(zhí)行該腳本內(nèi)容。

然而,如果在執(zhí)行該腳本時(shí),誤用了shell(如sh、bash等)命令進(jìn)行解析和執(zhí)行,由于shell并不具備解析和執(zhí)行expect語(yǔ)句的能力,因此會(huì)導(dǎo)致腳本無(wú)法正確運(yùn)行或出現(xiàn)錯(cuò)誤。

所以,在排查expect腳本執(zhí)行問(wèn)題時(shí),若確認(rèn)腳本內(nèi)部邏輯無(wú)誤,但依然無(wú)法正常工作,應(yīng)關(guān)注腳本是如何被調(diào)用和執(zhí)行的。如果發(fā)現(xiàn)腳本是通過(guò)非預(yù)期的方式執(zhí)行,那么這就可能是問(wèn)題的根源所在。

總結(jié)

到此這篇關(guān)于Linux自動(dòng)化交互腳本expect從安裝到開(kāi)發(fā)詳解的文章就介紹到這了,更多相關(guān)Linux自動(dòng)化交互腳本expect內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux中vi編輯器的練習(xí)心得

    linux中vi編輯器的練習(xí)心得

    給大家分享一下在linux中練習(xí)vi編輯器的心得以及需要避免的一些坑。
    2017-11-11
  • centos7使用supervisor的詳細(xì)教程

    centos7使用supervisor的詳細(xì)教程

    這篇文章主要為大家介紹了centos7使用supervisor的詳細(xì)教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 在Linux系統(tǒng)上創(chuàng)建軟連接和硬連接的方法

    在Linux系統(tǒng)上創(chuàng)建軟連接和硬連接的方法

    這篇文章主要介紹了在Linux系統(tǒng)上創(chuàng)建軟連接和硬連接的方法,通過(guò)執(zhí)行 man ln 命令,可以看到這是在文件之間建立鏈接,而沒(méi)有提及是軟鏈接或硬鏈接,文中通過(guò)代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Linux中配置DNS正向解析

    Linux中配置DNS正向解析

    本文介紹了如何配置DNS正向解析,包括編輯named.conf文件、abc.zone文件和啟動(dòng)服務(wù),配置中需注意文件格式和權(quán)限設(shè)置,實(shí)驗(yàn)通過(guò)配置DNS服務(wù)器實(shí)現(xiàn)域名到IP的解析,這對(duì)網(wǎng)絡(luò)管理和維護(hù)非常重要,關(guān)閉防火墻和設(shè)置SELinux為disabled是實(shí)驗(yàn)的基礎(chǔ)環(huán)境配置,通過(guò)實(shí)驗(yàn)
    2024-09-09
  • Centos Linux7設(shè)置靜態(tài)IP的實(shí)例

    Centos Linux7設(shè)置靜態(tài)IP的實(shí)例

    這篇文章主要介紹了Centos Linux7設(shè)置靜態(tài)IP的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • VMnet8模式虛擬機(jī)配置全過(guò)程

    VMnet8模式虛擬機(jī)配置全過(guò)程

    文章介紹了如何配置虛擬網(wǎng)關(guān)以實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的互連,包括前置知識(shí)網(wǎng)關(guān)的基本概念、虛擬機(jī)配置虛擬網(wǎng)關(guān)的步驟以及主機(jī)配置虛擬網(wǎng)關(guān)的方法
    2024-11-11
  • linux下通過(guò)rsync+inotify 實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)備份(遠(yuǎn)程容災(zāi)備份系統(tǒng))

    linux下通過(guò)rsync+inotify 實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)備份(遠(yuǎn)程容災(zāi)備份系統(tǒng))

    linux下為了數(shù)據(jù)安全或者網(wǎng)站同步鏡像,不得不考慮一些實(shí)時(shí)備份的問(wèn)題,這篇linux下通過(guò)rsync+inotify 實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)備份配置過(guò)程記錄下來(lái),防止遺忘
    2013-09-09
  • centos8使用Apache httpd2.4.37安裝web服務(wù)器的步驟詳解

    centos8使用Apache httpd2.4.37安裝web服務(wù)器的步驟詳解

    這篇文章主要介紹了centos8使用Apache httpd2.4.37安裝web服務(wù)器的步驟詳解,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 在centos 7中安裝配置k8s集群的步驟詳解

    在centos 7中安裝配置k8s集群的步驟詳解

    這篇文章主要給大家介紹了關(guān)于在centos 7中安裝配置k8s集群的步驟,文中通過(guò)示例代碼將步驟介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • Linux文件操作新手指南之關(guān)于install命令的用法

    Linux文件操作新手指南之關(guān)于install命令的用法

    這篇文章主要介紹了Linux文件操作新手指南之關(guān)于install命令的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

澎湖县| 万盛区| 巍山| 卢氏县| 平果县| 肇源县| 宁南县| 大理市| 新乡县| 北碚区| 镇巴县| 保靖县| 磴口县| 观塘区| 彭山县| 杭州市| 女性| 巴彦淖尔市| 囊谦县| 贡嘎县| 英山县| 贵德县| 通州区| 竹山县| 札达县| 清徐县| 乐清市| 北海市| 云和县| 陵川县| 周至县| 宣恩县| 泰安市| 南城县| 方城县| 保定市| 米林县| 沁阳市| 汉沽区| 津市市| 屏边|