在远程服务器上运行本地expect脚本?

在远程服务器上运行本地expect脚本?

所以我试图基本上通过 ssh 进入服务器并在那里运行本地期望脚本。我尝试遵循类似于 bash 命令的方式,即

    ssh -A user@remote "bash -s" < ./script "arg1" "arg2"

我为我的期望脚本采用了以下格式:

    ssh -A user@remote "expect" < ./script "arg1" "arg2"

但我不断收到以下错误:

    couldn't read file "arg1": No such file or directory.

我认为它正在尝试将我的第一个参数作为文件读取,并尝试通过查看这篇文章来解决这个问题:如何在远程计算机上执行本地脚本并包含参数?但是,这些解决方案都不适合我。可能是什么问题呢?

谢谢

答案1

expect似乎非常努力地从第一个参数中读取,就好像它是一个文件一样,即使有人使用-该插槽。一种解决方法似乎是提供/dev/stdin文件名以供expect读取。

$ printf 'puts [lindex $argv 1]' | ssh host 'expect /dev/stdin one two'
two
$ 

答案2

最简单的方法是将scp期望脚本发送到远程计算机并在那里运行它。这可以避免各种引用、文件描述符和变量范围(以及更多)问题,这些问题会真正搞乱您的一天并浪费您的时间。

更好的选择是将您的期望脚本重写为perl脚本(网络::SSHCPAN 模块非常适合这项工作。还有一个更通用的预计CPAN 模块),或作为python使用多个可用之一的脚本ssh 方法或者预期


IMO,如果您还不是expecttcl语言方面的专家,那么学习像这样的狭隘工具expect是浪费时间,而这些时间可以更有效地花在学习或提高通用工具/语言的技能上。

相关内容