[英]Expect Script for SFTP not working in bash
我創建了一個 shell 腳本,其中包含一個用於從遠程位置獲取文件的期望腳本。 一切正常,直到發送一些命令。 無論是 'ls' 還是 'pwd' 或任何其他命令,expect 腳本都會突然結束。 你能幫我解決這個問題嗎?
注意:安全不是問題,因此不使用公鑰。
#!/bin/ksh
FTPREMOTEPATH=/Inbox
FTPREMOTEFILENAME=test.CSV
/usr/bin/expect -f - <<EOFEXPECT1
set timeout 60
spawn sftp -oPort=1002 username@test.server.com
expect {
default { exit 1}
-re "failed|invalid password|Permission denied" {exit 2}
"Connection closed" {exit 1}
timeout {exit 1}
}
expect "Password:"
send "password\r"
expect {
default {exit 1}
-re "password|Enter password for " {puts "Incorrect Password"; exit 2}
"sftp>" {send "cd $FTPREMOTEPATH \r"}
}
expect "sftp>"
send "pwd\r"
send "get $FTPREMOTEFILENAME \r";
EOFEXPECT1
在上面的腳本中,腳本在發送 cd $FTPREMOTEPATH 后突然結束。
以下是輸出:
$ ./test.sh
spawn sftp -oPort=1002 username@test.server.com
Enter password for username
Password:
sftp> cd /Inbox
sftp> $
想象一下,你給當地一家餐館打電話,說“給我買點吃的”然后掛斷電話。 餐廳應該做什么?
當您等待 sftp 提示時,您正在等待食物送達。
我推薦兩件事:
send "get ...
的超時值更改為-1
如果花費超過60秒接收文件,這將有助於- 。expect eof
它可以讓 sftp 連接正常關閉。好吧,顯然我在 EOF (EOFEXPECT1) 之前錯過了期待 "sftp>" {send "bye\\n"} 。
但是,我仍然有興趣了解期待腳本中再見的重要性。
這是更新后的工作代碼:
#!/bin/ksh
FTPREMOTEPATH=/Inbox
FTPREMOTEFILENAME=test.CSV
/usr/bin/expect -f - <<EOFEXPECT1
set timeout 60
spawn sftp -oPort=1002 username@test.server.com
expect {
default { exit 1}
-re "failed|invalid password|Permission denied" {exit 2}
"Connection closed" {exit 1}
timeout {exit 1}
}
expect "Password:"
send "password\r"
expect {
default {exit 1}
-re "password|Enter password for " {puts "Incorrect Password"; exit 2}
"sftp>" {send "cd $FTPREMOTEPATH \r"}
}
expect "sftp>"
send "pwd\r"
send "get $FTPREMOTEFILENAME \r";
expect "sftp>" {send "bye\n"}
EOFEXPECT1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.