如何从Ruby中的命令行读取密码?

时间:2008-09-25 14:32:33

标签: ruby

我在Windows机器上运行Ruby和MySQL。

我有一些需要连接MySQL数据库的Ruby代码执行select。要连接到数据库,我需要提供密码等。

Ruby代码可以显示请求密码的提示,用户输入密码并按Enter键。我需要的是密码,因为它是键入的,显示为一行星号。

如何让Ruby在'dos box'中将键入的密码显示为一行星号?

6 个答案:

答案 0 :(得分:50)

要回答我自己的问题,并且为了其他任何想知道的人的利益,你需要一个名为HighLine的Ruby宝石。

require 'rubygems'
require 'highline/import'

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

thePassword = get_password()

答案 1 :(得分:24)

穷人的解决方案:

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

或使用http://raa.ruby-lang.org/project/ruby-password/

该库的目标受众是需要编写提示,生成,验证和加密密码的Ruby程序的系统管理员。

编辑:哎呀我没注意到你在Windows上需要这个:(

答案 2 :(得分:12)

根据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 :(得分:3)

以下作品(lobin.rb)在ruby中不是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:

答案 4 :(得分:3)

从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

上述内容是通过Zoran Majstorovic从已删除的答案中复制的。

答案 5 :(得分:0)

fancy_gets gem有一个密码可以和jruby一起使用:

https://github.com/lorint/fancy_gets

代码最终如下:

require 'fancy_gets'
include FancyGets

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