国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

“Linux免除系統(tǒng)交互操作方法、expect自動化交互工具” 及 “SSH批量修改主機密碼腳本”

這篇具有很好參考價值的文章主要介紹了“Linux免除系統(tǒng)交互操作方法、expect自動化交互工具” 及 “SSH批量修改主機密碼腳本”。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、Linux系統(tǒng)免除交互操作方法

1、EOF多文本輸入

案例:為機器磁盤進(jìn)行分區(qū)并實現(xiàn)掛載,免交互式操作,如何實現(xiàn)?

#!/bin/bash
fdisk /dev/sdb <<EOF
n
p
1
wq
EOF
 
mkfs.xfs /dev/sdb1 &&  mkdir -p /data && mount /dev/sdb1 /data
echo '/dev/sdb1 /data xfs defaults 0 2' >> /etc/fstab

# 與 echo -e "n\np" | fdisk /dev/sdb 方式一樣

2、標(biāo)準(zhǔn)輸出和錯誤輸出重定向 “> file 2>&1”

注意:有些命令的交互操作提示是不算在標(biāo)準(zhǔn)輸出和錯誤輸出中的,此時該方法不適用

ssh root@10.11.20.xxx -o StrictHostKeyChecking=no > logfile 2>&1
status_info=$( cat logfile )

case ${status_info} in
*Connection refused*)
    echo "正在執(zhí)行ssh連接主機${host}:ssh連接拒絕,請檢查ssh服務(wù)是否開啟!"
    ;;

*)
    echo "ssh連接中"

附:在腳本中如何替代Ctrl + C等關(guān)閉命令的終端窗口?

注意:命令的交互操作提示是不算終端窗口的,此時該方法不適用

例如可以通過以下方式將telnet命令關(guān)閉
 
sleep 1 | telnet 127.0.0.1 10050
 
echo -e "\n" | telnet 10.127.0.0.1 10050
 
echo "" | telnet 127.0.0.1 10050

telnet 127.0.0.1 10050 < /dev/null 代表標(biāo)準(zhǔn)輸入為空

3、Expect工具

一. expect 簡介

  • expect 工具是一個根據(jù)腳本與其他交互式程序進(jìn)行交互。通過在腳本中設(shè)定期望值和響應(yīng)值進(jìn)行交互操作。主要應(yīng)用于執(zhí)行命令和程序時,系統(tǒng)以交互形式要求輸入指定字符串,實現(xiàn)交互通信。

  • 解釋型語言提供分支和高級控制結(jié)構(gòu)引導(dǎo)對話。此外,用戶可以在需要時直接進(jìn)行控制和交互,然后將控制權(quán)返回給腳本。

  • 簡單來說,expect工具可以控制、處理輸入,輸出流,然后提供自動填寫數(shù)據(jù)等需要用戶交互式輸入的數(shù)據(jù)的地方實現(xiàn)自動化處理。Expect就是為了處理“自動交互”的工具。

二. expect工作原理

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

三. 基本語法

expect 啟動選項:

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

expect 命令參數(shù):

spawn	        交互程序開始,執(zhí)行后面的命令或程序。

set timeout n	設(shè)置超時時間,表示該腳本代碼需在n秒鐘內(nèi)完成,如果超過,則退出。用來防止ssh遠(yuǎn)程主機網(wǎng)絡(luò)不可達(dá)時卡住及在遠(yuǎn)程主機執(zhí)行命令宕住。如果設(shè)置為-1表示不會超時

set	            定義變量,也可以使用"set var [xxx]"方式; 命令置換[],[ ]內(nèi)是獨立的TCL指令,使用不同的TCL指令可實現(xiàn)各種獲取變量的效果。
                例如:
                    set CommandList [lindex $argv 3]
                    #獲取命令列表,分號分隔
                    set cmds [split $CommandList ";"]
                    #獲取命令列表長度
                    set cmds_num [llength $cmds]
    
$argv	        expect腳本可以接受bash的外部傳參,可以使用[ lindex $argv n ]n為0表示第一個傳參,為1表示第二個傳參,以此類推

expect	        從交互程序進(jìn)程中指定接收信息, 如果匹配成功, 就執(zhí)行send的指令交互;否則等待timeout秒后自動退出expect語句

send	        如果匹配到expect接受到的信息,就將send中的指令交互傳遞,執(zhí)行交互動作。結(jié)尾處加上\r表示如果出現(xiàn)異常等待的狀態(tài)可以進(jìn)行核查

exp_continue	表示循環(huán)式匹配,通常匹配之后都會退出語句,但如果有exp_continue則可以繼續(xù)執(zhí)行下面的匹配。
                例如:ssh需要先匹配yes/no,再匹配passoword。
                    yes/no" { send "yes\r"; exp_continue}
                    "password:" { send "$passwd\r" }

exit	        退出expect腳本

expect eof	    spawn進(jìn)程結(jié)束后會向expect發(fā)送eof,接收到eof代表該進(jìn)程結(jié)束

interact	    執(zhí)行完代碼后保持交互狀態(tài),將控制權(quán)交給用戶。沒有該命令執(zhí)行完后自動退出而不是留在遠(yuǎn)程終端上

send_user       用來打印expect腳本中的信息,類似shell里的echo命令

puts	        輸出變量(打印字符串,類似于echo)

注釋puts在輸出字符串的尾部自動添加換行符而send_user不會自動添加,除了換行符外,如果在Expect腳本中使用日志文件,則通過發(fā)送的語句send_user會將其放入日志文件,而通過發(fā)送的語句puts則不會。

四、案例介紹

[root@localhost ~]# vim test.sh				=>	一般將expect腳本的后綴命名為".sh"
 
 
#!/usr/bin/expect			=>	expect的解析器,與shell中的#!/bin/bash類似
set timeout n				=>	設(shè)置超時時間n秒,表示下面的代碼需在n秒鐘內(nèi)完成(-1代表永不超時),如果超過,則退出。用來防止ssh遠(yuǎn)程主機網(wǎng)絡(luò)不可達(dá)時卡住及在遠(yuǎn)程主機執(zhí)行命令宕住 
set name "12345"			=>	set設(shè)置變量,name的值為123456
  
spawn command1 command2..				=>	執(zhí)行命令,也可以將變量作為命令輸入
expect{									=>	接受執(zhí)行命令返回的信息
 
"accept1" {send "instruction1\r"; exp_continue}						=>	匹配到accest1,發(fā)送instruction1 指令并且\r 回車執(zhí)行
 
"accept2" {send "instruction2\r"; exp_continue}			=>	匹配到accest2,發(fā)送instruction2 指令并且\r 回車執(zhí)行,exp_continue表示循環(huán)匹配
 
"accept3" {send "\r"; exp_continue}									=>	匹配到accept3表示直接回車執(zhí)行
 
"accept4" {send "$name\r"}								=>	匹配到accept4,將變量值作為指令,并且回車執(zhí)行
}
 
expect eof                             =>結(jié)束這個進(jìn)程

二、SSH批量修改主機密碼腳本實現(xiàn)

shell腳本使用expect自動化交互工具完成密碼修改:

cat change_password.sh
#!/bin/bash
host_list=(127.0.0.1 127.0.0.2)
logfile=/tmp/change_password.log
old_pawd="password1"
new_pawd="password2"

function change_password(){   #case函數(shù)匹配條件中可以使用某些簡單的正則匹配字符(需測試),特殊字符使用\轉(zhuǎn)義

    case ${status_info} in
    *"Connection refused"*)
        echo "ssh端口不通,請檢查ssh服務(wù)是否開啟!"
        ;;

    *)
        echo "ssh端口訪問正常,開始執(zhí)行expect自動化交互操作!"
        /usr/bin/expect ./use_ssh.sh ${host} ${old_pawd} ${new_pawd}
    esac

}


for host in ${host_list[@]}
do
    # "< /dev/null"代表標(biāo)準(zhǔn)輸入為空,作用關(guān)閉終端窗口
    $( telnet ${host} 22 < /dev/null > ${logfile} 2>&1 )
    status_info=$( cat ${logfile} )
    change_password
done

expect自動化交互腳本文章來源地址http://www.zghlxwxcb.cn/news/detail-715347.html

#!/usr/bin/expect
#set timeout 30

#定義變量
set HostIP [lindex $argv 0]
set old_pawd [lindex $argv 1]
set new_pawd [lindex $argv 2]
set Command "passwd root"

# puts "舊密碼為:${old_pawd},新的為:${new_pawd}";

#執(zhí)行ssh命令,-o參數(shù)忽略第一次的yes/no選擇
spawn ssh -l root ${HostIP} -o StrictHostKeyChecking=no  

expect  {
    # 第一次連接輸入密碼
    "Password:" { 
        send "${old_pawd}\r";
        exp_continue 
    }
 
    # 輸入密碼錯誤,會再次提示
    "*Password:*" { 
        send_user " 主機${HostIP}:登錄密碼錯誤,請檢查登錄密碼!";
        expect eof
        exit 2
    }
   
    # 登陸成功,命令行界面,修改密碼
    "#" {
        send "${Command}\r";
    }
    "Enter new password:" {
        send_user "輸入的新密碼為:${new_pawd}"
        send "${new_pawd}\r";
    }
    "Re-type new password:" {
        send_user "再次輸入新密碼:${new_pawd}"
        send "${new_pawd}\r";
    }
    "passwd: password updated successfully" {
        send_user " 主機${HostIP}:修改密碼成功!";
        send "exit\r"
    }
}

sleep 1
send "exit\r"

expect eof

exit

到了這里,關(guān)于“Linux免除系統(tǒng)交互操作方法、expect自動化交互工具” 及 “SSH批量修改主機密碼腳本”的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【selenium自動化測試】如何定位頁面元素,及對頁面元素的操作方法

    【selenium自動化測試】如何定位頁面元素,及對頁面元素的操作方法

    selenium元素定位 ?selenium定位元素的方式有8種。 fild_element(by,value):by表示使用的定位方式,定位方式可以參見By類。value表示值,例如:根據(jù)id定位 By.ID,value=id屬性的值。該方法返回元素對象,返回值如下: 這個返回結(jié)果說明:返回值為WebElement類的對象,元素在使用方法時

    2024年02月10日
    瀏覽(28)
  • selenium+python自動化測試之使用webdriver操作瀏覽器的方法

    selenium+python自動化測試之使用webdriver操作瀏覽器的方法

    WebDriver簡介 selenium從2.0開始集成了webdriver的API,提供了更簡單,更簡潔的編程接口。selenium webdriver的目標(biāo)是提供一個設(shè)計良好的面向?qū)ο蟮腁PI,提供了更好的支持進(jìn)行web-app測試。從這篇博客開始,將學(xué)習(xí)使用如何使用python調(diào)用webdriver框架對瀏覽器進(jìn)行一系列的操作 打開瀏覽

    2024年01月25日
    瀏覽(28)
  • 【操作系統(tǒng)】Liunx項目自動化構(gòu)建工具-make/Makefile

    【操作系統(tǒng)】Liunx項目自動化構(gòu)建工具-make/Makefile

    ? ? ? ? ?? ??Yan-英杰的主頁 悟已往之不諫 知來者之可追?? C++程序員,2024屆電子信息研究生 目錄 一、背景 二、Makefile ? ? ? ? 實現(xiàn) ? ? ? ? Makefile依賴 ????????依賴關(guān)系 ? ? ? ? makefile的工作原理 ????????項目清理 ????????補充: ? ? ? ? .PHONY是什么? ?

    2024年02月16日
    瀏覽(23)
  • windows自動化點擊大麥app搶購、撿漏,僅支持windows11操作系統(tǒng)

    windows自動化點擊大麥app搶購、撿漏,僅支持windows11操作系統(tǒng)

    確保windows11版本操作系統(tǒng),如果不是可以通過鏡像升級為windows11 如果已經(jīng)是windows11操作系統(tǒng),確保更新到最新版本 修改系統(tǒng)所在時區(qū),將國家或地區(qū)改為美國 開啟虛擬化 勾選Hyper-V,如果沒有則不需要勾選 勾選虛擬機平臺 勾選完畢,點擊確定,等待完

    2024年02月14日
    瀏覽(40)
  • 案例分享| T-Box功能自動化測試方案: 測試對象和原理分析 | 車內(nèi)T-Box與手機端的交互流程 | 測試方案設(shè)計及實測結(jié)果 | T-Box功能自動化測試系統(tǒng)框架 | 軟硬件工具組成及作用

    案例分享| T-Box功能自動化測試方案: 測試對象和原理分析 | 車內(nèi)T-Box與手機端的交互流程 | 測試方案設(shè)計及實測結(jié)果 | T-Box功能自動化測試系統(tǒng)框架 | 軟硬件工具組成及作用

    背景 T-Box是實現(xiàn)汽車車聯(lián)網(wǎng)的一個關(guān)鍵環(huán)節(jié),從起初單純的實現(xiàn)車輛信息采集,已發(fā)展到具有車輛信息監(jiān)測及信息交互(V2X)、車輛遠(yuǎn)程控制、安全監(jiān)測和報警、遠(yuǎn)程診斷、邊緣計算等多種離線和在線的應(yīng)用功能的載體。為保障T-Box功能的正常運轉(zhuǎn),對其進(jìn)行功能測試就尤為

    2024年04月13日
    瀏覽(31)
  • Linux【腳本 05】交互式shell腳本編寫及問題處理([: ==: unary operator expected)[: ==: 期待一元表達(dá)式

    之前寫了Windows的cmd腳本用來保存報告文件: 但是有時候服務(wù)僅在Linux環(huán)境上進(jìn)行部署,所以要寫一個shell腳本進(jìn)行報告的保存。 2.1 初始版本 簡單的參數(shù)判斷,這里只給出一個分支,腳本save.sh內(nèi)容如下: 此時如果執(zhí)行腳本時沒有攜帶參數(shù),將會報錯: 這個腳本的問題很多

    2024年02月09日
    瀏覽(19)
  • Linux學(xué)習(xí)之expect操作詳解

    Linux學(xué)習(xí)之expect操作詳解

    1.expect命令安裝 安裝語句:yum install expect 2.expect命令含義 expect是一種腳本語言,它能夠代替人工實現(xiàn)與終端的交互,主要應(yīng)用于執(zhí)行命令和程序時,系統(tǒng)以交互形式要求輸入指定字符串,實現(xiàn)交互通信。 3.expect使用場景 (1)并根據(jù)預(yù)定標(biāo)準(zhǔn)回答其問題,回答“是”、“否”或

    2024年02月01日
    瀏覽(17)
  • App自動化測試:高級控件交互技巧

    App自動化測試:高級控件交互技巧

    簡介 APP 的控件元素不僅涵蓋了基礎(chǔ)用戶界面操作,還包括用戶與應(yīng)用程序中更復(fù)雜、功能豐富的空間之間的互動。這種交互遠(yuǎn)不止于簡單的按鈕或輸入框。通過借助 Appium 的 Actions,能夠完成對應(yīng)用程序進(jìn)行手勢識別的交互。這意味著可以通過各種手勢,如滑動、縮放、長按

    2024年04月10日
    瀏覽(15)
  • 【shell】交互式自動化執(zhí)行命令

    sftp 登陸并傳輸文件時需要手動輸入密碼 通過 expect 腳本模擬用戶輸入來與命令交互, 根據(jù)命令的輸出提示, 來執(zhí)行相應(yīng)的操作, 來實現(xiàn)自動化 expect 給變量賦值用 set 變量名 \\\"變量值\\\" 獲取今天 : set today [clock format [clock seconds] -format %Y-%m-%d] 獲取昨天 : set yesterday [clock format [expr

    2024年02月09日
    瀏覽(28)
  • [Python自動化]使用Python Pexpect模塊實現(xiàn)自動化交互腳本使用心得

    參考文檔:https://pexpect.readthedocs.io/en/stable/ 在最近的工作中,需要使用DockerFile構(gòu)建鏡像。在構(gòu)建鏡像的過程中,有一些執(zhí)行的命令是需要交互的。例如安裝 tzdata (apt install tzdata),不過在使用apt安裝時,可以直接使用 DEBIAN_FRONTEND=noninteractive 前綴來取消交互(至于是禁止交互還

    2023年04月25日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包