Shell指令碼免密登陸 Expect

2021-10-10 01:16:51 字數 2303 閱讀 2891

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...