我有一个在Ubuntu本地机器上运行的Python程序。在程序的某个时刻,我会连接到两台远程机器:一台运行Ubuntu,另一台运行Windows。我已经拥有了连接这些机器所需的IP地址、名称和密码。本地机器向远程机器发送命令,而远程机器则发送响应。目前,我只是想让远程机器回显“hello”给本地机器。我可以在本地机器上使用以下命令行远程登录这两台机器:
这很好,但是当我在Windows服务器上尝试相同的操作时,我得到了一个空列表:
sshpass -p password ssh -X name@ipaddress
所以我知道只要正确填写每台机器的密码,名称和IP地址,我就可以远程访问这两台机器。从那里,我可以像本地一样运行任何命令。
但是,我想在程序内发送一个简单的 echo 'hello'
指令来完成此操作。我可以通过以下方式成功地执行远程Ubuntu服务器:
from subprocess import Popen, PIPE
cmd = ["sshpass", "-p", password, "ssh", "-X", name+"@"+ipaddress, "echo 'hello'"]
ssh = Popen(cmd, stdout=PIPE, stderr=PIPE)
print ssh.stdout.readlines()
密码、名称和IP地址是已经定义的变量。这适用于Ubuntu远程服务器,在此处返回以下列表:
['hello\n']
这很好,但是当我在Windows服务器上尝试相同的操作时,我得到了一个空列表:
[]
我尝试了各种命令,但总是得到一个空列表。连接到Windows服务器时需要做些不同的事情或其他操作吗?谢谢。
我查看了stderr,其中包括以下列表:
['X11 forwarding request failed on channel 0\r\n', 'exec request failed on channel 0\r\n']
如果我不包含-X标记,那么我只会得到第二个错误:
['exec request failed on channel 0\r\n']