简体   繁体   中英

winpexpect not behaving like pexpect

I've been having this problem for days now and I can't figure out whats going wrong.

I have a simple python script using pexpect running on OSX which lauches ssh-keygen and automates hitting return to generate a key pair and it works fine. I want to do the same thing on windows. To get ssh and ssh-keygen on windows, I installed OpenSSH for Windows which lets ssh run from the cmd prompt as a normal windows program using a portion of the CYGWIN support files. I ported the same script to windows and changed pexpect to winpexpect and used the coresponding winspawn to start the subprocess but it stalls out at the first prompt.

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()

the output I get is this:

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: :

and it's here that it sits for all eternity collecing digital dust bunnies.

I dont understand why its getting ":" after the expected colon either.

Is there perhaps another module I could use that would allow me to communicate better with OpenSSH for Windows?

Quite some time ago, I looked at winpexpect. I couldn't get it to run either, it just hung. Something to do with unsupported sections, and an incomplete port if I remember correctly.

Since I needed it for ssh, I ended up replacing it with paramiko . It requires pycrypto, which is a pain to set up on windows, unless you use a precompiled installer . For the key generation, see this section of the docs . It has loading and saving of keys. Also pay attention to the missing host key function.

To get up and running quickly, here is an overview . Please note it does not go over all of the function calls, such as why he is using AutoAddPolicy() . Check the docs for the pros/cons and more details.

Here is a fork project winpexpect : This version fixed many bugs. You can have a try.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM