首页 > 解决方案 > 如何修复我的期望脚本以进行 scp 下载?

问题描述

我正在尝试使用 expect 绕过我正在使用的远程服务器的密码身份验证过程,因此我可以批量下载一系列文件,每个文件都存储在不同的文件夹中。

使用 expect 的原因是远程文件存储在单独的文件夹中,我正在访问的服务器不允许我 ssh 密钥访问。

目前我正在努力使用期望下载单个文件,不要介意一次多个文件。下面是我的简单脚本:

#!/bin/bash 

#connect to the server using scp
expect <<EOF
spawn scp username@server:file.txt ./
expect “*word:*“
send “password\r”
EOF

我希望将 file.txt 下载到我运行脚本的目录中。但是,当它运行时,我从服务器获取文本输出,要求输入密码,然后暂停 4-5 秒,然后退出命令提示符。

非常感谢您对此的任何帮助!

标签: macosshellterminalexpectscp

解决方案


  1. 我在您的代码中看到“花式”引号。Expect 不会将它们理解为引号。确保您的编辑器不使用“智能引号”。
  2. 发送密码后,您必须等待下载完成才能退出脚本:

    #!/bin/bash 
    
    #connect to the server using scp
    expect <<EOF
        set timeout -1
        spawn scp username@server:file.txt ./
        expect "*word:*"
        send "password\r"
        expect eof
    EOF
    

推荐阅读