我的本地机器上有一个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:没有这样的文件或目录”。有人可以帮我吗?提前谢谢。
编辑:我不想先将脚本复制到远程计算机然后执行它。我尝试过它可以工作,但我只是不想以这种方式运行它。
答案 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"