簡體   English   中英

我無法使用Expect腳本連接sftp

[英]I'm not able to connect sftp using expect script

我無法確定我在哪里做錯了。如果我做錯了,請告訴我。

#!/usr/bin/bash

File_Sftp ()
{
    set user="xxxx"
    set password="xxxxx"
    set host="ftp.xxxx.xxxx.com"

    STATUS=$(
    expect << EOF
    spawn sftp $user@$host
    expect "User Name:"
    send "$user\r"
    expect "Password:"
    send "$password\r"
    expect "sftp> "
    send "cd in\r"
    expect "sftp> "
    send "get $1\r"
    expect "sftp> "
    send "exit\r"
EOF
    )

    if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
      echo "Success";
    else
      echo "Unsuccessful" ;
    fi
}

File_Sftp "/usr/local/bin/xxxxxx.txt"

每當我嘗試執行以上shell腳本時,都會出現以下錯誤:

send: spawn id exp4 not open
    while executing
"send "\r""
Unsuccessful

這些bash行不符合您的想法:

set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"

它們不是設置變量值,而是將位置參數$1設置為給定的字符串。 實際變量仍未設置

spawn嘗試啟動sftp $user@$host失敗(實際上是sftp @帶有未設置的變量),默認的expect "User Name:"將在默認的10秒鍾后超時,然后錯誤消息來自send "$user\\r" (或send "\\r"帶有未設置變量的send "\\r" )-沒有與之互動的衍生過程。

如果在測試時使用expect -d <<EOF則可以看到此信息(打開Expect的詳細調試輸出)

你要

user="xxxx"
password="xxxxx"
host="ftp.xxxx.xxxx.com"

或者,因為這是bash,並且我們想推廣良好的編程習慣(沒有全局變量)

local user="xxxx"
local password="xxxxx"
local host="ftp.xxxx.xxxx.com"

發送“退出”后添加expect eof


要查看在預期輸出中是否出現226 ,我將更改

if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then

if grep -q '\<226\>' <<< "$STATUS" ; then

要么

if [[ $STATUS == *226* ]]; then

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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