我几天来一直遇到这个问题,我无法弄清楚什么是错的。
我有一个简单的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进行通信?
答案 0 :(得分:1)
很久以前,我看过winpexpect。我无法让它跑,它只是挂了。与不支持的部分有关,如果我没记错的话,还有一个不完整的端口。
由于我需要ssh,我最终用paramiko替换它。除非你使用precompiled installer,否则它需要pycrypto,这在Windows上设置很痛苦。对于密钥生成,请参阅this section of the docs。它有加载和保存键。还要注意丢失的主机键功能。
要快速启动并运行,此处为overview。请注意,它不会覆盖所有函数调用,例如他使用AutoAddPolicy()
的原因。查看文档以获取优缺点和更多详细信息。
答案 1 :(得分:0)
这是一个fork项目winpexpect: 这个版本修复了很多错误。你可以尝试一下。