通过expect在远程服务器上运行本地Perl脚本

时间:2013-08-28 14:44:22

标签: expect

我的本​​地计算机上有一个Perl脚本,我想在远程服务器上运行它。以下命令工作正常:

ssh user@ipaddress "perl - --arg1 arg1 --arg2 arg2" < /path/to/local/script.pl

问题是提示出现问我密码,我不希望这样。

我环顾网络,找到了3个解决方案:

  • 使用公钥/私钥认证 - &gt;在我的情况下不行
  • 使用sshpass - &gt;不在我公司的'官方'回购中,所以无法安装
  • 使用expect

我按照这个页面来创建我的期望脚本(我是新的期望):How to use bash/expect to check if an SSH login works,我从正确答案中取出脚本,并用#!/usr/bin/expect -f替换了3个第一行期待剧本。

然后我跑了

./ssh.exp user password ipaddress "perl - --arg1 arg1 --arg2 arg2" < /path/to/local/script.pl

我有超时错误。好像我跑了./ssh.exp user password ipaddress "perl"

我也尝试过像

这样的引号
./ssh.exp user password ipaddress '"perl - --arg1 arg1 --arg2 arg2" < /path/to/local/script.pl'

但我有/path/to/local/script.pl not found错误。

所以有人可以帮我弄清楚如何通过expect运行脚本吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

好的,我自己找到了。

仍在使用此答案How to use bash/expect to check if an SSH login works,但我用

替换了第6行
set pid [ spawn -noecho sh -c "ssh $1@$3 $4 < /path/to/local/script.pl" ]

一切都像魅力一样。