使用expect在远程计算机上运行python脚本

时间:2018-02-08 07:17:32

标签: python bash ssh expect

我的本​​地机器上有一个python脚本,它只打印“hello world”。我想使用Expect通过ssh在远程计算机上运行此脚本。我使用Expect自动输入密码。在命令行中输入以下命令将运行远程计算机上的本地脚本,但是它们要求用户输入密码:

ssh abcd@111.222.333.44 python < hello .py

cat hello.py | ssh abcd@111.222.333.44 python -

以下.exp脚本自动输入密码,但运行已在远程计算机上的脚本。

#!/usr/bin/expect
spawn ssh abcd@111.222.333.44 python < hello.py
set pass "1"
expect {
    password: { send "$pass\r"; exp_continue }
}

如果在远程计算机上找不到hello.py文件,我会收到以下消息:“bash:hello.py:没有这样的文件或目录”。有人可以帮我吗?提前谢谢。

编辑:我不想先将脚本复制到远程计算机然后执行它。我尝试过它可以工作,但我只是不想以这种方式运行它。

1 个答案:

答案 0 :(得分:3)

<在Expect / Tcl中并不特别。 spawn ssh abcd@111.222.333.44 python < hello.py就像您手动运行ssh abcd@111.222.333.44 "python < hello.py",其中<在远程端被解释。

您可以这样写:

spawn bash -c "ssh abcd@111.222.333.44 python < hello.py"

spawn bash -c "cat hello.py | ssh abcd@111.222.333.44 python"