使用 expect 在远程机器上执行本地 bash 脚本

使用 expect 在远程机器上执行本地 bash 脚本

我有本地 shell 脚本。现在,我想在远程机器上运行这个本地脚本。当然我可以使用ssh,但是由于它(本地 shell 脚本)应该像一个自动化脚本,它不应该要求手动输入密码。所以我使用 expect 来消除这个问题,这样如果我运行脚本它就不会要求密码。我的脚本如下所示。

#!/usr/bin/expect
spawn ssh -o GSSAPIAuthentication=no [email protected] 'bash -s' < /path/to/localscript
expect -timeout 7 "*(yes/no)?" { send "yes\r";exp_continue } 
expect -timeout 3 "*d: "
send "qbcrootpass\n"
interact

但它不起作用。请注意,在我的场景中,我不想使用公钥认证。

请帮助我使用 expect 在远程机器上执行本地脚本。

答案1

该重定向由命令行上的 shell 处理。Expect 无法理解如何执行此操作。这应该可以工作(未经测试):

set fh [open /path/to/localscript r]
set contents [read $fh]
close $fh

spawn ssh ... "bash -c '$contents'"

相关内容