Как я могу прочитать пароль из командной строки в Ruby?

Я запускаю Ruby и MySQL в Windows.

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

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

Как заставить Ruby отображать введенный пароль в виде строки звездочек в поле «dos»?

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
35
0
20 024
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Бедняжка:

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

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

The target audience for this library is system administrators who need to write Ruby programs that prompt for, generate, verify and encrypt passwords.

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

Я пробовал это в сочетании с readline, и я все еще мог видеть пароль

Besi 18.08.2012 12:06

пароль = STDIN.noecho (&: получает) .chomp; # <- это тоже должно работать (возможно, не для windows)

jonS90 09.03.2014 01:41
Ответ принят как подходящий

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

require 'rubygems'
require 'highline/import'

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

thePassword = get_password()

highline у ​​меня не сработал, он все равно повторял пароль. Я думаю, что это было связано с тем, что termios не был установлен, но он все еще не работал после установки ruby-termios. Вместо этого я использовал рубиновый пароль.

user2063200 12.02.2013 05:00

Согласно документу 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:  ******

Если вы запускаете сценарий с помощью команды ruby, вам не нужен #!/usr/local/bin/ruby, если бы вы запускали сценарий напрямую с ./highline.rb, вам нужно.

Mark Szymanski 19.12.2010 23:34

Позвольте мне добавить, что обычно #! / Usr / bin / env ruby ​​лучше в качестве первой строки, поскольку он находит установку ruby ​​независимо от того, где она находится.

user132837 12.09.2012 14:16

Следующие работы (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:  ********

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

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

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

https://github.com/lorint/fancy_gets

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

require 'fancy_gets'
include FancyGets

puts "Password:"
pwd = gets_password
# ...

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

require 'io/console' 

STDIN.getpass("Password: ")

http://ruby-doc.org/stdlib-2.3.0/libdoc/io/console/rdoc/IO.html#method-i-getpass

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

Хороший. И как говорится в документации: «Для использования этого метода вам необходимо потребовать 'io / console'».

contradictioned 19.03.2019 10:49

Другие вопросы по теме