I'm trying to get a script that works both in a native windows shell and a cygwin shell (via ssh) that prompts for and reads a password entered by the user. So far, I have tried the following methods:
- using Term::ReadKey and setting ReadMode to 'noecho'
- RESULT: returns an error
GetConsoleMode failed
and quits
- RESULT: returns an error
- using Term::ReadPassword::Win32
- RESULT: hangs and never offers a prompt or reads input
- using IO::Prompt
- RESULT: returns an error
Cannot write to terminal
and quits
- RESULT: returns an error
- using Term::InKey
- RESULT: returns an error
Not implemented on MSWin32: The handle is invalid
and quits
- RESULT: returns an error
All of these work in a native Windows shell (command prompt or power shell), but none of them work when I'm in an ssh session to the server.
Really, that's what I'm most interested in, getting it to work in the remote ssh session.
I'm getting ssh via cygwin installed on the Windows server (2003 R2). I'm using strawberry perl and not the cygwin perl (cygwin perl breaks other perl scripts I need to run natively in Windows, not via ssh).
My best guess is that cygwin+Windows is screwing with strawberry perl enough that it can't tell what kind of environment it is in. I'm looking into alternative sshd+Windows solutions to explore this.
These are all the methods I've been able to find in my searching. Does anybody else have any other methods for hiding user input they can suggest?
GetConsoleMode failed
and quits, the second method hangs and never offers a prompt or reads input, the third method returns an errorCannot write to terminal
and quits, and the fourth method returns an errorNot implemented on MSWin32: The handle is invalid
and quits. In a native Windows shell they all work except for the third method which returns the same error, so it's possible I'm just not invoking it correctly. – Feints