expect是一種能夠按照指令碼內容裡面設定的方式與互動式程式進行「會話」的程式。根據指令碼內容,expect可以知道程式會提示或反饋什麼內容以及 什麼是正確的應答。它是一種可以提供「分支和巢狀結構」來引導程式流程的解釋型指令碼語言。
shell功能很強大,但是不能實現有互動功能的多機器之前的操作,例如ssh和ftp.而expect可以幫助我們來實現.
一,安裝expect
yum install expect
其實expect根bash形勢上差不多的.
二,例項
1,ssh實現自動登入,並停在登入伺服器上 檢視
複製列印?
#!/usr/bin/expect -f
set ip [lindex $argv
0 ]
//接收第乙個引數,並設定ip
set password [lindex $argv
1 ]
//接收第二個引數,並設定密碼
#set password [exec md5sum /tmp/a.txt] //設定密碼為乙個bash的命令結果,刻exec
set timeout 10 //設定超時時間
spawn ssh root@$ip
//傳送ssh請滶
expect
//第一次ssh連線會提示yes/no,繼續
"*password:"
//出現密碼提示,傳送密碼
} interact //互動模式,使用者會停留在遠端伺服器上面.
執行結果如下: 檢視
複製列印?
root@ubuntu:/home/zhangy# ./test.
exp192.168.1.130 admin
spawn ssh [email protected]
last login: fri sep 7 10:47:43 2012 from 192.168.1.142
[root@linux ~]#
這個例子有統一的介面,根據ip和密碼可以連線到不同的機器.如果你嫌輸入ip和密碼麻煩,看下面的例子 檢視
複製列印?
#!/usr/bin/expect -f
set ip 192.168.1.130
set password admin
set timeout 10
spawn ssh root@$ip
expect
"*password:"
} interact
執行結果如下: 檢視
複製列印?
root@ubuntu:/home/zhangy# ./web.
expspawn ssh [email protected]
last login: fri sep 7 12:59:02 2012 from 192.168.1.142
[root@linux ~]#
2,ssh遠端登入到伺服器,並且執行命令,執行完後並退出 檢視
複製列印?
#!/usr/bin/expect -f
set ip 192.168.1.130
set password admin
set timeout 10
spawn ssh root@$ip
expect
"*password:"
} expect "#*"
send "pwd\r"
send "exit\r"
expect eof
執行結果如下: 檢視
複製列印?
root@ubuntu:/home/zhangy# ./test3.
expspawn ssh [email protected]
[email protected]'s password:
last login: fri sep 7 14:05:07 2012 from 116.246.27.90
[root@localhost ~]# pwd
/root
[root@localhost ~]# exit
logout
connection to 192.168.1.130 closed.
檢視複製列印?
#!/usr/bin/expect -f
set ip [lindex $argv
0 ]
set dir [lindex $argv
1 ]
set file [lindex $argv
2 ]
set timeout 10
spawn ftp $ip
expect "name*"
send "zwh\r"
expect "password:*"
send "zwh\r"
expect "ftp>*"
send "lcd $dir\r"
expect
"*now*"
} expect
"*ok"
} expect eof
執行結果如下: 檢視
複製列印?
root@ubuntu:/home/zhangy# ./test2.
exp192.168.1.130 /
var/www/www aaa.html
spawn ftp 192.168.1.130
connected to 192.168.1.130.
220 (vsftpd 2.0.5)
name (192.168.1.130:root): zwh
331 please specify the password.
password:
230 login successful.
remote system type is unix.
using binary mode to transfer files.
ftp> lcd /var
/www/www
local directory now /var
/www/www
ftp> get /var
/www/www/aaa.html /
var/www/www/aaa.html
local: /var
/www/www/aaa.html remote: /
var/www/www/aaa.html
200 port command successful. consider using pasv.
150 opening binary mode data connection for
/var
/www/www/aaa.html (66 bytes).
226 file send ok.
66 bytes received in 0.00 secs (515.6 kb/s)
quit aaa.html has been download
221 goodbye.
收藏、分享這篇文章!
-------------------------------------------
下面給出scp和ssh的使用示例:
1、scp
expect -c "
spawn scp [email protected]:/root/1.log /root
expect
\"yes/no\"
}expect eof"
2、ssh
#!/bin/bash
expect -c "
spawn ssh [email protected] \"ls;\"
expect
\"yes/no\"
}expect eof"
linux expect自動登入ssh,ftp
參考 expect是一種能夠按照指令碼內容裡面設定的方式與互動式程式進行 會話 的程式。根據指令碼內容,expect可以知道程式會提示或反饋什麼內容以及 什麼是正確的應答。它是一種可以提供 分支和巢狀結構 來引導程式流程的解釋型指令碼語言。shell功能很強大,但是不能實現有互動功能的多機器之前的操...
linux expect自動登入ssh,ftp
一,安裝expect yum install expect 其實expect根bash形勢上差不多的.二,例項 1,ssh實現自動登入,並停在登入伺服器上檢視 複製列印?usr bin expect f set ip lindex argv 0 接收第乙個引數,並設定ip set password ...
linux expect自動登入ssh,ftp
expect是一種能夠按照指令碼內容裡面設定的方式與互動式程式進行 會話 的程式。根據指令碼內容,expect可以知道程式會提示或反饋什麼內容以及 什麼是正確的應答。它是一種可以提供 分支和巢狀結構 來引導程式流程的解釋型指令碼語言。shell功能很強大,但是不能實現有互動功能的多機器之前的操作,例...