预期的scp2远程脚本不会复制所有文件



我有两台远程机器,让我们称它们为A和B。

我想把文件从A传送到B。

我期望的脚本:

#!/usr/bin/expect
set cmd [lindex $argv 0]
set password1 [lindex $argv 1]
set password2 [lindex $argv 2]
spawn bash -c "$cmd"
expect {
-re ".*es.*o.*" {
exp_send "yesr"
exp_continue
}
-re ".*sword.*" {
exp_send "$password1r"
exp_continue
}
-re ".*sword.*" {
exp_send "$password2r"
}
}

预期脚本用于shell脚本:

expect $my_path/my_expect_script.exp "scp -r $remote_A_user@$remote_A_host:$file_path/* $remote_B_user@$remote_B_host:$file_path" $remote_A_password $remote_B_password 

当第一次输入密码时,脚本总是会返回错误,在同一次执行中,下一次尝试会起作用。

yes
qa@172.23.0.2's password: 
Permission denied, please try again.

有时一些文件没有复制到远程B.

你知道我如何在两个遥控器上执行scp-expect脚本吗。

谢谢,

首先,在成功进行身份验证后,脚本中不再有命令,因此需要退出,这会杀死scp。要等待scp完成,您必须等待eof

接下来,假设文件传输耗时超过10秒,您应该将timeout值设置为Infinity:set timeout -1

最后,第二个密码将永远不会发送:第一个密码提示将始终首先匹配。如果这是两个不同的密码提示,则需要使它们与关于不同主机的一些唯一文本相匹配。

此外,压痕有助于理解

spawn bash -c "$cmd"
set timeout -1
expect {
-re ".*es.*o.*" { # <== this is meaningless to the reader: add a whole word
exp_send "yesr"
exp_continue
}
-re ".*sword.*" { # <== need something more here
exp_send "$password1r"
exp_continue
}
-re ".*sword.*" { # <== need something more here
exp_send "$password2r"
exp_continue
}
eof
}

相关内容

  • 没有找到相关文章

最新更新