我有本地 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'"