因此,我尝试将文件从多台本地计算机 scp 到驱动器。但是,并非所有这些计算机之前都连接到该服务器。因此,有时机器在之前连接时只会提示输入密码,有时机器会警告密钥指纹。到目前为止,我已经有了发送 scp 的脚本,我只需要有关变量的帮助。所以显然我的帖子不够清楚。这是我到目前为止所拥有的。
这就是我的期望
set timeout -1
spawn ./transfer
match_max 100000
expect -exact "\rThe authenticity of host '192.168.255.255 (192.168.255.255)' can't be established.\r
ED25519 key fingerprint is SHA256:jkladfsjklfjklfjklfjklfjklfdsjklfdsjkldfsjkl;fds\r
This key is not known by any other names\r
Are you sure you want to continue connecting (yes/no/\[fingerprint\])? "
send -- "yes\r"
expect -exact "yes\r
Warning: Permanently added '192.168.255.255' (ED234234) to the list of known hosts.\r\r
\r([email protected]) Password:"
send -- "123456\r"
expect eof
“自动预期”57L,2242B
有些机器已经添加了网络服务器。因此,期望“主机的真实性”将会失败,因为它只会要求输入密码。 我正在尝试弄清楚如何输入 Expect if,then 来查找“the authentcity”提示或只是一个密码。
我发现一篇文章说你可以将两个期望组合在一起,无论得到哪一个都会推动适当的响应?但我不确定如何正确格式化它。如何对期望进行分组,以便脚本在从未提示“主机的真实性”时不会感到困惑。
expect
命令可以采用多种模式,您可以并行观察:
spawn ./transfer
expect {
"Are you sure you want to continue connecting " {
send -- "yes\r"
exp_continue
}
"Password:" {
send -- "123456\r"
}
}
expect eof
exp_continue
“循环”回到同一个期望语句,因此它可以继续等待其中一种模式。
“密码”块不会继续,因此发送密码后,expect命令结束,然后等待进程结束。