winpexpect表现不像pexpect

时间:2012-05-28 19:17:25

标签: python windows ssh paramiko pexpect

我几天来一直遇到这个问题,我无法弄清楚什么是错的。

我有一个简单的python脚本,使用在OSX上运行的pexpect,它运行ssh-keygen并自动命中返回以生成密钥对,它工作正常。我想在Windows上做同样的事情。为了在Windows上获得ssh和ssh-keygen,我安装了OpenSSH for Windows,它允许ssh从cmd提示符作为普通的Windows程序运行,使用一部分CYGWIN支持文件。我将相同的脚本移植到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进行通信?

2 个答案:

答案 0 :(得分:1)

很久以前,我看过winpexpect。我无法让它跑,它只是挂了。与不支持的部分有关,如果我没记错的话,还有一个不完整的端口。

由于我需要ssh,我最终用paramiko替换它。除非你使用precompiled installer,否则它需要pycrypto,这在Windows上设置很痛苦。对于密钥生成,请参阅this section of the docs。它有加载和保存键。还要注意丢失的主机键功能。

要快速启动并运行,此处为overview。请注意,它不会覆盖所有函数调用,例如他使用AutoAddPolicy()的原因。查看文档以获取优缺点和更多详细信息。

答案 1 :(得分:0)

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