1、建立在tcl上的乙個工具;
2、用於進行自動化控制和測試;
3、解決shell指令碼中互動相關的問題。
1、判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回;
2、只能捕捉由spawn啟動的程序的輸出;
3、用於接收命令執行後的輸出,然後和期望的字串匹配。
1、向程序傳送字串,用於模擬使用者的輸入;
2、該命令不能自動回車換行,一般要加\r(回車)或\n(換行)
啟動程序,並跟蹤後續互動資訊
1、expect eof:等待執行結束;
2、interact:執行完成後保持互動狀態,把控制權交給控制台。
1、設定超時時間,過期則繼續執行後續指令;
2、單位是秒;
3、timeout -1 表示永不超時;
4、預設情況下,timeout是10秒。
允許expect繼續向下執行指令。
回顯命令,相當於echo。
1、expect指令碼可以接受從bash傳遞的引數;
2、也可以使用[lindex $ar** n]獲得;
3、n從0開始,分別表示第乙個,第二個,第三個…引數。
單分支send最後要加分號
●單一分支語法
expect
"password:"
●多分支模式語法
(1)
expect
"aaa"
expect
"aaa"
expect
"aaa"
send命令不具備回車換行功能,所以需要自己新增\r 或 \n
(2)
expect
"bbb"
"ccc"
}
『只要匹配了aaa 或bbb或ccc中的任何乙個,執行相應的send語句後就會退出該expect語句』
expect
"bbb"
"ccc"
}
exp_continue表示繼續後面的匹配,如果匹配了aaa,執行完send語句後還會繼續向下匹配bbb
捕捉內容要用雙引號引起來
1、直接執行:
[$ar** 0],代表位置變數$1
[$ar** 1],代表位置變數$2
#!/usr/bin/expect 是expect二進位制檔案的路徑
[root@localhost~]cat test.sh
#!/usr/bin/expect
set timeout 60 ##設定超時時間
log file test.log
log_user 1 ##展示日誌資訊,展示寫1,不展示寫0
set hostname [lindex $ar** 0] ##變數定義
set password [lindex $ar** 1]
spawn ssh root @$hostname ##追蹤指令
expect
"*password"
}interact ##將許可權轉交控制台
注意:只能用 ./ 來執行,因為不是bash環境了
2、嵌入執行
[root@localhost~]cat b.sh
#!/bin/bash
hostname=$1
password=$2
expect<<-eof
spawn ssh root@$
expect
"*password"
} expect "*]#"
send "exit\r"
expect eof
eof 'expect結束標誌,eof前後不能有空格'
#!/bin/bash
yum -y install expect
ip=$1
passwd=$2
/usr/bin/expect<-keygen -t rsa
expect
"(empty for no passphrase)"
"passphrase again"
}expect eof
eof/usr/bin/expect<-
copy
-id $1
expect
"password"
}expect eof
eofssh root@$1
Linux免密登陸
a為本地主機 即用於控制其他主機的機器 b為遠端主機 即被控制的機器server 假如ip為172.24.253.2 a和b的系統都是linux 在a上的命令 ssh keygen t rsa 連續三次回車,即在本地生成了公鑰和私鑰,不設定密碼 ssh root 172 24.253 2 mkdir...
ssh 免密登陸
摘要 在本地生成公鑰私鑰對,並將公鑰上傳至 server 端實現免密登陸。1.使用 ssh keygen 生成金鑰 ssh keygen t rsa f filename在生成金鑰對時,會要求輸入 passphrase generating public private rsa key pair.e...
ssh免密登陸
有兩台linux機器 node1 172.16.160.92 node2 172.16.160.91 先在node1 172.16.160.92 這台機器操作 生產金鑰 ssh keygen t rsa p 回車把id rsa.pub追加到授權的key裡面去。cat ssh id rsa.pub s...