使用Expect在远程机器上运行本地Python脚本

3
我在本地机器上有一个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: No such file or directory"。请问有谁能帮我吗?提前感谢。
编辑:我不想先将脚本复制到远程机器上再执行它。我尝试过并且可以运行,但是我不想以这种方式运行它。

1
你想让它做什么?如果没有文件,它应该报错。 - whackamadoodle3000
为什么不首先使用 scp 或 rsync 将 Python 脚本(hello.py)移动到远程计算机上,然后使用您的脚本执行它。 - quant
@whackmadoodle3000 如我在问题中所解释的那样,我想通过ssh在远程机器上运行本地脚本,并避免手动输入密码的过程。 - Alperen Görmez
1个回答

4

<在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"

我能用这种方法来控制远程计算机作为从属吗?我应该编写远程管理系统来运行从属计算机,它们计算大量科学数据。这是我的毕业项目。你有什么建议吗? - Yılmaz edis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接