【问题标题】:winpexpect not behaving like pexpectwinpexpect 的行为不像 pexpect
【发布时间】:2012-05-28 19:17:25
【问题描述】:

我已经有这个问题好几天了,我不知道出了什么问题。

我有一个使用 pexpect 在 OSX 上运行的简单 python 脚本,它启动 ssh-keygen 并自动点击返回以生成密钥对,它工作正常。我想在 Windows 上做同样的事情。为了在 Windows 上获取 ssh 和 ssh-keygen,我安装了 OpenSSH for Windows,它允许 ssh 从 cmd 提示符运行,作为使用部分 CYGWIN 支持文件的普通 Windows 程序。我将相同的脚本移植到 Windows 并将 pexpect 更改为 winpexpect 并使用对应的 winspawn 启动子进程,但它在第一个提示符处停止。

def generateKeys(self):
    print "GeneratingKeys..."
    gen = winpexpect.winspawn("ssh-keygen -t rsa")
    print gen.expect(":") #This is where it asks for a place to save the keys. retuns 0 if found
    print "before: " + gen.before
    print "after: " + gen.after
    print gen.sendline()
    #Next it should expect a prompt for a passphrase but it never reaches it
    print gen.expect(":")
    print "before: " + gen.before
    print "after: " + gen.after
    print gen.sendline()

我得到的输出是这样的:

GeneratingKeys...
0
before: Enter file in which to save the key (/home/user/.ssh/id_rsa)
after: :
2
before: Enter file in which to save the key (/home/user/.ssh/id_rsa)
after: :

它就在这里,它为所有收集数字灰尘的兔子提供了永恒的空间。

我也不明白为什么在预期的冒号之后会出现“:”。

我是否可以使用另一个模块来更好地与 OpenSSH for Windows 进行通信?

【问题讨论】:

    标签: python windows ssh paramiko pexpect


    【解决方案1】:

    很久以前,我看了winpexpect。我也无法让它运行,它只是挂了。如果我没记错的话,与不受支持的部分和不完整的端口有关。

    因为我需要它用于 ssh,所以我最终将其替换为 paramiko。它需要 pycrypto,这在 Windows 上设置起来很麻烦,除非你使用 precompiled installer。有关密钥生成,请参阅this section of the docs。它具有加载和保存密钥。还要注意缺少主机键功能。

    为了快速启动和运行,这里是overview。请注意,它并没有涵盖所有的函数调用,例如他为什么使用AutoAddPolicy()。查看文档以了解优缺点和更多详细信息。

    【讨论】:

    • 我正在研究 paramikio,但我不确定它是否适用于我的项目。看,我正在尝试让另一个应用程序(Unison)使用 ssh 在网络上交换文件。 Unison 在本地查找 ssh 客户端,我不确定它是否会使用 paramiko 创建的隧道。
    • @Hiroshi Paramiko 可以与本地客户端集成密钥,请参阅文档中的保存功能。我不确定隧道,但统一文档似乎表明统一启动 ssh 本身。
    • ^ facepalm 对不起,脑子放个屁。我不知道为什么我认为我需要自己启动 ssh。现在查看保存功能。谢谢!
    【解决方案2】:

    这是一个 fork 项目winpexpect: 此版本修复了许多错误。你可以试一试。

    【讨论】:

    • 你知道它是否解决了 OP 的问题吗?
    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多