簡體   English   中英

預期 SFTP 腳本在 bash 中不起作用

[英]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 提示時,您正在等待食物送達。

我推薦兩件事:

  1. send "get ...的超時值更改為-1如果花費超過60秒接收文件,這將有助於- 。
  2. 在您發送“再見”之后, expect eof它可以讓 sftp 連接正常關閉。

原因是您的 Expect 腳本已經到達腳本的末尾,因此在 ftp 進程有機會完成下載文件之前終止了子 (ftp) 進程。

在此處輸入圖片說明

好吧,顯然我在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM