1

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

我有一个使用在 OSX 上运行的 pexpect 的简单 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: :

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

我也不明白为什么它在预期的冒号之后得到“:”。

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

4

2 回答 2

1

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

由于我需要它用于 ssh,因此我最终将其替换为paramiko。它需要 pycrypto,这在 Windows 上设置起来很麻烦,除非您使用预编译的安装程序。有关密钥生成,请参阅文档的这一部分。它具有加载和保存密钥。还要注意缺少主机键功能。

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

于 2012-05-29T13:12:17.827 回答
0

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

于 2012-09-07T08:53:11.547 回答