Python winpexpect的行为与pexpect不同

Python winpexpect的行为与pexpect不同,python,windows,ssh,paramiko,pexpect,Python,Windows,Ssh,Paramiko,Pexpect,我已经有这个问题好几天了,我不知道出了什么问题 我有一个简单的python脚本,它使用运行在OSX上的pexpect启动ssh keygen,并自动点击return生成密钥对,效果很好。我想在windows上做同样的事情。为了在windows上获得ssh和ssh密钥,我安装了OpenSSH for windows,它允许ssh作为一个普通的windows程序,使用部分CYGWIN支持文件从cmd提示符运行。我将相同的脚本移植到windows,并将pexpect更改为winpexpect,并使用共

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

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

很久以前,我研究了winpexpect。我也无法让它运行,它只是挂了起来。与不支持的部分有关,如果我没记错的话,还有一个不完整的端口

因为ssh需要它,所以我最终将它替换为。它需要pycrypto,在windows上设置pycrypto很麻烦,除非您使用。有关密钥生成,请参见。它可以加载和保存密钥。还要注意缺少主机键功能


为了快速起床和跑步,这里有一个例子。请注意,它并没有覆盖所有函数调用,例如他为什么使用
AutoAddPolicy()
。查看文档中的优点/缺点和更多细节。

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

因为ssh需要它,所以我最终将它替换为。它需要pycrypto,在windows上设置pycrypto很麻烦,除非您使用。有关密钥生成,请参见。它可以加载和保存密钥。还要注意缺少主机键功能

为了快速起床和跑步,这里有一个例子。请注意,它并没有覆盖所有函数调用,例如他为什么使用
AutoAddPolicy()
。查看文档中的优缺点和更多详细信息。

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

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

我正在调查paramikio,但我不确定它是否适合我的项目。请看,我正在尝试让另一个应用程序(Unison)使用ssh在web上交换文件。Unison在本地查找ssh客户端,我不确定它是否会使用paramiko创建的隧道。@Hiroshi paramiko可以与本地客户端集成密钥,请参阅文档中的保存功能。我不确定隧道,但unison文档似乎表明unison自己启动ssh。^facepalm抱歉,大脑放屁。我不知道为什么我认为我需要自己启动ssh。现在查看保存功能。谢谢我在调查帕拉米乔,但我不确定它是否适合我的项目。请看,我正在尝试让另一个应用程序(Unison)使用ssh在web上交换文件。Unison在本地查找ssh客户端,我不确定它是否会使用paramiko创建的隧道。@Hiroshi paramiko可以与本地客户端集成密钥,请参阅文档中的保存功能。我不确定隧道,但unison文档似乎表明unison自己启动ssh。^facepalm抱歉,大脑放屁。我不知道为什么我认为我需要自己启动ssh。现在查看保存功能。谢谢你知道它是否解决了OP的问题吗?你知道它是否解决了OP的问题吗?