Как я могу прочитать пароль из командной строки в Ruby? - PullRequest
35 голосов
/ 25 сентября 2008

Я использую Ruby и MySQL в Windows.

У меня есть некоторый код Ruby, который должен соединиться с базой данных MySQL для выполнения выбора. Для подключения к базе данных мне нужно предоставить пароль, между прочим.

Код Ruby может отображать подсказку с запросом пароля, пользователь вводит пароль и нажимает клавишу Enter. Мне нужно, чтобы пароль в том виде, в котором он был напечатан, отображался в виде звездочки.

Как я могу заставить Ruby отображать набранный пароль в виде звездочки в поле "DOS"?

Ответы [ 6 ]

50 голосов
/ 25 сентября 2008

Чтобы ответить на мой собственный вопрос и для всех, кто хотел бы знать, есть рубиновый камень под названием HighLine , который вам нужен.

require 'rubygems'
require 'highline/import'

def get_password(prompt="Enter Password")
   ask(prompt) {|q| q.echo = false}
end

thePassword = get_password()
24 голосов
/ 25 сентября 2008

Бедное мужское решение:

system "stty -echo"
# read password
system "stty echo"

Или используя http://raa.ruby -lang.org / project / ruby-password /

Целевая аудитория этой библиотеки - системные администраторы, которым необходимо писать программы на Ruby, которые запрашивают, генерируют, проверяют и шифруют пароли.

Редактировать: К сожалению, я не заметил, что вам это нужно для Windows: (

12 голосов
/ 14 апреля 2010

Согласно документу Highline, похоже, это работает. Не уверен, что он будет работать в Windows.

#!/usr/local/bin/ruby
require 'rubygems'
require 'highline/import'

username = ask("Enter your username:  ") { |q| q.echo = true }
password = ask("Enter your password:  ") { |q| q.echo = "*" }

Вот вывод на консоль:

$ ruby highline.rb 
Enter your username:  doug
Enter your password:  ******
3 голосов
/ 01 июня 2018

Начиная с Ruby 2.3, вы можете использовать метод IO#getpass как таковой:

require 'io/console' 

STDIN.getpass("Password: ")

http://ruby -doc.org / STDLIB-2.3.0 / libdoc / IO / консоль / RDoc / IO.html # метод-я-GetPass

Вышеупомянутое скопировано с удаленного ответа Зоран Майсторович .

3 голосов
/ 12 сентября 2013

Следующие работы (lobin.rb) в ruby ​​not jruby

require 'highline/import'

$userid = ask("Enter your username:  ") { |q| q.echo = true }
$passwd = ask("Enter your password:  ") { |q| q.echo = "*" }

Вывод с консоли:

E:\Tools>ruby login.rb
Enter your username:  username
Enter your password:  ********

Однако, если я бегу в jruby, он не работает и не дает возможности ввести ваш пароль.

E:\Tools>jruby login.rb
Enter your username:  username
Enter your password:
0 голосов
/ 08 сентября 2016

В драгоценном камне fancy_gets есть пароли, которые отлично работают с jruby:

https://github.com/lorint/fancy_gets

Код заканчивается как:

require 'fancy_gets'
include FancyGets

puts "Password:"
pwd = gets_password
# ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...