包括期望中的条件陈述

时间:2013-12-21 23:12:21

标签: bash ssh expect

我正在尝试编写一个使用expect来将文件scp到远程系统的bash脚本。我到目前为止的期望块看起来像这样

expect -c "
    set timeout -1
    spawn scp $file user@host:$file
    expect "\Are you sure you want to continue connection (yes/no)\"
    send -- \"$password\r\"
    expect eof
    "

问题在于,它处理主机不是已知主机的情况,并询问我是否要继续连接。我想为主机已知并且只是想要密码的情况添加一个选项。

另一个问题是我想处理用户输入的密码不正确的事件。在这种情况下,我想让用户重新输入密码。

使用bash并期望实现这一目标的最佳方式是什么?

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

  

主机不是已知主机,它询问我是否要继续连接

使用:scp -o "StrictHostKeyChecking no" <...>

  

用户输入的密码不正确的事件

如果您的脚本被认为是互动的,为什么要使用expectscp可以自行询问并重新提问密码。

答案 1 :(得分:0)

像这样:

expect -c "
    set timeout -1
    spawn scp $file user@host:$file
    expect 
        {Are you sure you want to continue connection (yes/no)} {
            send \"yes\r\"
            exp_continue
        }
        {Password: } {
            send -- \"$password\r\"
        }
    }
    expect eof
"

exp_continue命令循环回包含expect命令,以便其他模式可以匹配更改。