Expect 用法

inux shell腳本嵌套expect 實現遠程ssh登入,傳送文件

原創 deelaaay 2014-03-06 16:53:19 評論(0) 1505人閱讀linux

目的:linux shell腳本嵌套expect 實現遠程ssh登入,登入後執行一個命令,將命令保存到一個文件,利用scp傳送文件到本地指定目錄下面。shell

另外,附加幾個網上的例子。bash

我的以爲將下面的幾個shell看懂。基本上就掌握了初步的expect 用法服務器

 

遠程鏈接對方機器 執行命令,將結果保存到文件 遠程傳送過來,本機讀取數據判斷
#!/bin/bash
/usr/bin/expect >/dev/null 2>&1 <<EOF 
set timeout 30
spawn ssh root@192.168.2.128
expect "*password:"
send "123456\r"
expect "*#"
send "service heartbeat status >/tmp/status \r"
spawn scp  root@192.168.2.128:/tmp/status /root/ceshi-heartbeat/
expect "*password:"
send "123456\r"
expect "*#"
exit
expect eof
EOF
cat status|grep "heartbeat OK" >/dev/null 2>&1
[ $? = 0 ]&& echo "OK"
[ $? != 0 ]&& echo "not OK"ssh

 


、使用腳本文件的例子--實現自動輸密碼
#!/usr/bin/expect -f
set password 123456
#download
spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/
set timeout 300 
expect "root@192.168.1.218's password:"
set timeout 300 
send "$password\r"
set timeout 300 
send "exit\r"
expect eof   www.2cto.com

三、在sh腳本中嵌入expect的例子--經過連上一個公網的服務器再轉跳到一個內網的服務器上,用腳本實現不用輸密碼,直接使用./goto.sh servername
#!/bin/bash
passmsmallq10="a"
passzhsh="a"
passfcwr="b"
passwapfx="c"
passadfx="d"

ip1="200.100.10.10"
ip2="10.100.100.70"
ip3="10.100.100.60"
ip4="10.100.100.10"
ip5="10.100.100.20"

case $1 in 
"zhsh") passstr=$passzhsh ipstr=$ip2 ;;
"fcwr") passstr=$passfcwr ipstr=$ip3 ;;
"wapfx") passstr=$passwapfx ipstr=$ip4 ;;
"adfx") passstr=$passadfx ipstr=$ip5 ;;
*) echo "The parameter $1 isn't exist"
exit 0 ;;  www.2cto.com
esac

command1="ssh -l m_smallq -p 36000 $ip1"
command2="ssh -l mqq -p 36000 $ipstr"

expect -c "
        set timeout 60;
        spawn $command1;
        expect {
                \"221.130.15.10's password:\" {send \"$passmsmallq10\r\"; exp_continue}
                \"m_smallq\" {send \"$command2\r\"; exp_continue}
                \"mqq's password:\" {send \"$passstr\r\";interact}
                }
        "

對上面例子的expect的解說
expect -c "..."  --裏面輸入命令
expect {...}     --裏面的多行記錄,從上向下掃描匹配,誰先匹配誰先處理。
www.2cto.com

四、ssh到另外一臺機子執行df -h後退出,要點是send後面能夠跟多個命令,經過\r來分行成多個命令
#!/bin/bash
ip1="183.62.178.191"
command1="ssh -l root -p 14322 $ip1"

expect -c "
        spawn $command1;
        expect {
                \"183.62.178.191's password:\" {send \"aa\r\"; exp_continue}
                \"root@\" {send \"df -h\r exit\r\"; exp_continue}
                }
        "spa

相關文章
相關標籤/搜索