Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hiding User Input

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:

  1. using Term::ReadKey and setting ReadMode to 'noecho'
    • RESULT: returns an error GetConsoleMode failed and quits
  2. using Term::ReadPassword::Win32
    • RESULT: hangs and never offers a prompt or reads input
  3. using IO::Prompt
    • RESULT: returns an error Cannot write to terminal and quits
  4. using Term::InKey
    • RESULT: returns an error Not implemented on MSWin32: The handle is invalid and quits

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?

like image 218
sgsax Avatar asked Mar 08 '11 23:03

sgsax


1 Answers

use Term::ReadKey;
print "Please enter your artifactory user name:";
$username = <STDIN>;
chomp($username);
ReadMode('noecho'); # don't echo
print "Please enter your artifactory password:";
$password = <STDIN>;
chomp($password);
ReadMode(0); #back to normal
print "\n\n";
like image 124
kazerm Avatar answered Sep 22 '22 07:09

kazerm