我正在尝试编写一个使用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并期望实现这一目标的最佳方式是什么?
非常感谢提前!
答案 0 :(得分:0)
主机不是已知主机,它询问我是否要继续连接
使用:scp -o "StrictHostKeyChecking no" <...>
用户输入的密码不正确的事件
如果您的脚本被认为是互动的,为什么要使用expect
? scp
可以自行询问并重新提问密码。
答案 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命令,以便其他模式可以匹配更改。