使用sftp下载文件的bash脚本

时间:2015-04-10 23:16:50

标签: shell unix ssh sh expect

我需要使用密码建立sftp连接并下载文件。有一个ip限制所以首先我应该建立一个ssh连接。我写了一个脚本,但在与ssh连接后卡住了。

注意:我也尝试过使用expect脚本,但它也没有用。

#!/usr/local/bin/
ssh test@test1.t.com
lftp sftp://test2:123456@test2.com
get "file.xls"

编辑:你也可以在这里看到我的期望代码。

#!/usr/local/bin/expect -f
expect -c "
spawn ssh test@test1.t.com
expect \"test\@test1\:\~\$\"
spawn sftp test2@test2.com
expect \"*assword:\"
send \"123456\r\"
expect \"sftp\>\"
send \"get file.xls\r\" 
expect \"sftp\>\" 
exit 1
";

1 个答案:

答案 0 :(得分:1)

我不确定你到底想要完成什么。首先,我将解决您期望脚本中的问题。由于你的shebang行调用expect,你不需要将期望体包裹在期望的调用中。这摆脱了所有的反斜杠。接下来,您有2个产卵调用,这引发了有关您的意图的问题。我将假设您要ssh到test1,然后从test2获取文件,以便该文件存在于test1上。此假设将第二个spawn更改为普通send命令。

#!/usr/local/bin/expect -f

set shell_prompt "test@test1:~$"
set sftp_prompt "sftp>" 

spawn ssh test@test1
expect $shell_prompt
send "sftp test2@test2\r"
expect "*assword:"
send "123456\r"
expect $sftp_prompt
send "get file.xls\r" 
expect $sftp_prompt
send "exit\r"
expect $shell_prompt
send "exit\r"
expect eof

现在,您可以scp将文件发送到本地计算机。让我们将这两个步骤放入一个shell脚本中:

#!/bin/sh

expect <<'EXPECT_SCRIPT'
    set shell_prompt "test@test1:~$"
    set sftp_prompt "sftp>" 

    spawn ssh test@test1
    expect $shell_prompt
    send "sftp test2@test2\r"
    expect "*assword:"
    send "123456\r"
    expect $sftp_prompt
    send "get file.xls\r" 
    expect $sftp_prompt
    send "exit\r"
    expect $shell_prompt
    send "exit\r"
    expect eof
EXPECT_SCRIPT

scp test@test1:file.xls .