使用Plink(PuTTy)通过Python进行SSH连接

8

我希望你能帮我翻译一段关于IT技术的文本。内容为我想编写一个Python脚本,用于SSH到服务器并执行命令。我在Windows上使用Python 2.6,并安装了plink和paegent(用于SSH密钥),并将它们全部添加到了我的路径中。

如果我打开命令提示符并输入以下命令:

plink username@host -i key.ppk
open vnc://www.example.com/

我看到了期望的行为——VNC查看器在我的Mac(服务器)上打开。

但是,我已经尝试过两种通过Python编程来实现此目标的方法,但都无法正常工作:

方法1(os):

import os
ff=os.popen("plink user@host -i key.ppk",'w')
print >>ff, r"open vnc://www.example.com"
ff.flush() 

方法二(子进程):

import subprocess
ff=subprocess.Popen("plink user@host -i key.ppk",shell=False,stdin=subprocess.PIPE)
ff.stdin.write(r"open vnc://www.example.com")
ff.stdin.flush()

两种方法都没有产生错误,但是都没有打开VNC窗口。然而,我相信它们都成功连接到了远程主机。

我做错了什么?


3
为什么要使用 plinkputty,而不是使用 paramiko 或者可能的 fabric 呢? - wkl
@birryree 我已经在Windows上使用Popen打开VNC服务器,所以这是我首先想到的。我没有听说过paramiko或fabric,但我会尝试一下,谢谢! - Jeff
1
由于您想通过SSH执行命令,因此Fabric无疑是您想要的工具。它非常适用于自动化,因为可以获取远程服务器的标准输出,执行命令,使用sudo等功能。Paramiko是一个SSH包装库,而Fabric是基于它构建的。 - wkl
3个回答

7
在第二种方法中,使用


ff.communicate("open vnc://www.example.com\n")

刚刚在输入我的问题答案时!问题是我需要在语句末尾加上一个新行(\n)。我以为 .flush() 会做到,但它没有。然而,我更喜欢使用 stdin.write,这样它就不会关闭子进程。谢谢! - Jeff

0

我使用fabric来通过SSH在远程计算机上自动运行命令。


-1

我会尝试:

Popen("plink user@host -i key.ppk", shell=True)
Popen("open vnc://www.example.com", shell=True)

我无法Popen第二行,因为它不是本地命令。无论如何,这没有起作用,但通过打印plink的输出,帮助我找到了解决方案! - Jeff

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