【问题标题】:Using Plink (PuTTy) to SSH through Python使用 Plink (PuTTy) 通过 Python 进行 SSH
【发布时间】:2011-12-25 11:05:01
【问题描述】:

我正在尝试编写一个 python 脚本,它将通过 SSH 连接到服务器并执行命令。我在 Windows 上使用 Python 2.6,并安装了 plink 和 paegent(用于 ssh 密钥)并将它们全部添加到我的路径中。

如果我转到命令提示符并键入:

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

我看到了所需的行为——在我的 Mac(服务器)上打开了一个 VNC 查看器。

但是,如果我尝试了两种通过 Python 以编程方式执行此操作的方法,但都不起作用:

方法1(操作系统):

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

方法2(子流程):

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 窗口。但是,我相信他们都成功连接到远程主机。

我做错了什么?

【问题讨论】:

  • 不是一个答案 - 但是当您可以使用 paramiko 或可能使用 fabric 时,为什么还要使用 plinkputty
  • @birryree 我已经在使用 Popen 在 Windows 上打开 VNC 服务器,所以我首先想到了。我还没有听说过 paramiko 或 fabric,但我会试一试,谢谢!
  • 既然你想通过 SSH 执行命令,Fabric 绝对是你想要的。自动化非常好,因为您可以获取远程服务器的标准输出、执行命令、使用sudo 等。Paramiko 是一个 SSH 包装库,Fabric 是在它之上构建的。

标签: python ssh putty plink subprocess


【解决方案1】:

我使用 fabric 在远程 PC 上通过 SSH 自动运行命令。

【讨论】:

    【解决方案2】:

    在第二种方法中,使用

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

    【讨论】:

    • 只是在输入我自己对这个问题的答案!问题是我在语句末尾需要一个换行符 (\n)。我认为 .flush() 会这样做,但事实并非如此。但是我更喜欢使用 stdin.write 以便它不会关闭子进程。谢谢!
    【解决方案3】:

    我会尝试:

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

    【讨论】:

    • 我无法打开第二行,因为它不是本地命令。无论如何,这没有用,但确实通过打印 plink 的输出帮助我确定了解决方案!
    猜你喜欢
    • 2015-03-03
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多