Linux expect 介紹和用法

2021-10-11 01:53:59 字數 3245 閱讀 1821

expect是乙個自動化互動套件,主要應用於執行命令和程式時,系統以互動形式要求輸入指定字串,實現互動通訊。

expect自動互動流程:

spawn啟動指定程序—expect獲取指定關鍵字—send向指定程式傳送指定字元—執行完成退出.

注意該指令碼能夠執行的前提是安裝了expect

yum install -y expect
expect常用命令總結:

spawn               互動程式開始後面跟命令或者指定程式

expect 獲取匹配資訊匹配成功則執行expect後面的程式動作

send exp_send 用於傳送指定的字串資訊

exp_continue 在expect中多次匹配就需要用到

send_user 用來列印輸出 相當於shell中的echo

exit 退出expect指令碼

eof expect執行結束 退出

set 定義變數

puts 輸出變數

set timeout 設定超時時間

示例:

1.ssh登入遠端主機執行命令,執行方法 expect 1.sh 或者 ./1.sh

# vim 1.sh

#!/usr/bin/expect

spawn ssh [email protected] df -th

expect "*password"

send "123456\n"

expect eof

ssh遠端登入主機執行命令,在shell指令碼中執行expect命令,執行方法sh 2.sh、bash 2.sh 或./2.sh都可以執行.

#!/bin/bash

passwd='123456'

/usr/bin/expect <<-eof

set time 30

spawn ssh [email protected] df -th

expect

"*password:"

}expect eof

eof

3.expect執行多條命令

#!/usr/bin/expect -f

set timeout 10

spawn sudo su - root

expect "*password*"

send "123456\r"

expect "#*"

send "ls\r"

expect "#*"

send "df -th\r"

send "exit\r"

expect eof

建立ssh key,將id_rsa和id_rsa.pub檔案分發到各台主機上面。

1.建立主機配置檔案

[root@localhost script]# cat host

192.168.1.10 root 123456

192.168.1.20 root 123456

192.168.1.30 root 123456

[root@localhost script]# ls

copykey.sh hosts

2.編寫copykey.sh指令碼,自動生成金鑰並分發key.

[root@localhost script]# vim copykey.sh

#!/bin/bash

# 判斷id_rsa金鑰檔案是否存在

if [ ! -f ~/.ssh/id_rsa ];then

ssh-keygen -t rsa -p "" -f ~/.ssh/id_rsa

else

echo "id_rsa has created ..."

fi#分發到各個節點,這裡分發到host檔案中的主機中.

while read line

douser=`echo $line | cut -d " " -f 2`

ip=`echo $line | cut -d " " -f 1`

passwd=`echo $line | cut -d " " -f 3`

expect #!/bin/bash

ip=$1

user=$2

password=$3

expect <

6.使用普通使用者登入遠端主機,並通過sudo到root許可權,通過for迴圈批量在遠端主機執行命令.

$ cat timeout_login.txt

10.0.1.8

10.0.1.34

10.0.1.88

10.0.1.76

10.0.1.2

10.0.1.3

#!/bin/bash

for i in `cat /home/admin/timeout_login.txt`

do /usr/bin/expect << eof

spawn /usr/bin/ssh -t -p 22022 admin@$i "sudo su -"

expect

}

expect

}expect

}expect "*]#"

send "df -th\r"

expect "*]#"

send "exit\r"

expect eof

eofdone

密碼過期需要批量修改密碼

#!/bin/bash

for i in `cat /root/soft/ip.txt`

do /usr/bin/expect << eof

spawn /usr/bin/ssh root@$i

expect

}expect

}expect

}expect "*]#"

send "echo huawei@123|passwd --stdin root\r"

expect "*]#"

send "exit\r"

expect eof

eofdone

Linux expect介紹和用法

expect時用與提供自動互動的工具。比如如果想要用ssh登陸伺服器,每次都輸入密碼你覺得麻煩,那你就可以使用expect來做自動互動,這樣的話就不用每次都輸入密碼了。先看例子 usr bin expect set timeout 20 設定超時時間 spawn ssh root 192.168.4...

Linux expect介紹和用法

expect工具主要用於在linux上免互動實行程式。yum install expect y expect常用選項 c 從命令列執行expect指令碼,預設expect是互動地執行的 expect常用命令 spawn 互動程式開始後面跟命令或者指定程式 expect 獲取匹配資訊匹配成功則執行ex...

C 基礎 Func和Action的介紹及其用法

func是一種委託,這是在3.5裡面新增的,2.0裡面我們使用委託是用delegate,func位於system.core命名空間下,使用委託可以提公升效率,例如在反射中使用就可以彌補反射所損失的效能。action和func的功能是一樣的,只是action沒有返型別,func 有引數,有返回型別 a...