2016-03-27 89 views
0

我有這個功能,當我傳遞正確的用戶名和密碼時,以及當我故意傳遞錯誤的密碼時,我卡在Password:提示符下。Net :: SSH卡住了密碼提示

def perform(sensor_params) 
    @hostname = "10.0.10.100" 
    @username = "root" 
    @password = "root" 

    @cmd = "id" 

    begin 
     ssh = Net::SSH.start(@hostname, @username, :password => @password) 
     res = ssh.exec!(@cmd) 
     ssh.close 
     puts res 
    rescue 
     puts "Unable to connect to #{@hostname} using #{@username}/#{@password}" 
    end 
end 

任何想法,當我傳遞的密碼不正確時,只能吐出消息「無法連接」?

感謝

+0

缺少密碼命令的雙引號。 –

+0

不知道你的目標是「我怎麼只是吐出信息」。使用'non_interactive'設置並移除'rescue'塊(或縮小它),該方法應該引發'Net :: SSH :: AuthenticationFailed'異常。 –

回答

4

根據該文檔,你可以通過:non_interactive => true,而不是拋出一個身份驗證錯誤。

+0

我實際上已經嘗試過使用:non_interactive => true,當我這樣做時,我一直在收到認證錯誤,即使我正在傳遞正確的密碼 – Deano

0

通過:number_of_password_prompts => 0解決了我的問題。

+0

這與奇怪地等同於設置['non_interactive'](https://github.com /net-ssh/net-ssh/blob/master/lib/net/ssh.rb#L212),如Frederick Cheung所述。 –