2008-09-25 92 views
35

我在Windows機器上運行Ruby和MySQL。如何從Ruby的命令行讀取密碼?

我有一些Ruby代碼需要連接到MySQL數據庫執行選擇。要連接到數據庫,我需要提供其他密碼。

Ruby代碼可以顯示請求密碼的提示,用戶輸入密碼並點擊Enter鍵。我需要的是輸入的密碼作爲一行星號顯示。

我該如何讓Ruby在'dos框中'顯示輸入的密碼作爲一行星號?

回答

50

要回答我的問題,並想知道誰比誰的利益,不存在一個Ruby寶石叫HighLine你需要的。

require 'rubygems' 
require 'highline/import' 

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

thePassword = get_password() 
+0

highline不會爲我工作,它仍然回顯密碼。我認爲這與termios未安裝有關,但在安裝ruby-termios後仍然不起作用。我用ruby-password代替。 – user2063200 2013-02-12 01:00:59

24

窮人的解決方案:

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

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

的目標讀者爲這個圖書館是誰需要編寫一個提示,生成,驗證和加密密碼Ruby程序的系統管理員。

編輯:哎呦我沒有注意到,你需要這個適用於Windows :(

+0

我的ReadLine試過這個組合,我能仍然看到密碼 – Besi 2012-08-18 08:06:02

+1

password = STDIN.noecho(&:gets).chomp; #< - 這應該也工作(可能不適用於Windows) – jonS90 2014-03-08 21:41:29

12

根據海萊文檔,這似乎工作。不知道是否會在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

以下作品(lobin.rb)的紅寶石不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: 
0

的fancy_gets寶石有使用JRuby工作正常密碼的事情:

https://github.com/lorint/fancy_gets

的代碼最終像:

require 'fancy_gets' 
include FancyGets 

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