2012-07-09 31 views
0

我在控制器中建立ssh連接,並在連接成功建立時顯示視圖。 我需要我的行動,如果未建立連接 這是我的看法重定向到「denied_access」圖,其中使用進入他的細節:在控制器ruby​​ on rails ssh連接檢查有效性

<%= form_for :check_validity, :method => "get", :url => {:action => "check_validity"} do |f| %> 
//enters user name and password here and submits 
<% end%> 

檢查有效性的行動:

def check_validity 
    @USER = params[:check_validity][:username] 
    @PASS = params[:check_validity][:password] 
    @DOMAIN = params[:check_validity][:domain] 
    @HOST = 'hostname' 

    Net::SSH.start(@HOST, @USER, :password => @PASS) do|ssh| 

    @result = ssh.exec!("/lclapps/oppen/http/ldap-group-list-2.4.3.py #{@DOMAIN} #{@USER} #{@PASS}") 
    end 
     respond_to do |format| 
     if(@result =~ /Informatica Developer/) 
      format.html{redirect_to display_command_list_path({:username => @USER})} 
     else 
      format.html{redirect_to denied_access_path} 
     end 
     end 
    end 

這裏連接已建立,正在檢查resutl中的Informatica Developer字符串並重定向到display_command_list_path。但是我想檢查連接是否已經建立,甚至在檢查這個字符串之前是否建立,如果連接沒有建立,請重定向到denied_access_path。 我該怎麼做?

回答

2

當試圖連接Net::SSH.start時,如果證書無效,您將得到Net::SSH::AuthenticationFailed異常。

begin 
    Net::SSH.start(@HOST, @USER, :password => @PASS) do |ssh| 
    # ... 
    end 
rescue Net::SSH::AuthenticationFailed => e 
    # redirect to denied_access_path 
end 

# your respond_to block ... 

我還要提到,如果@HOST是壞的,它會提高一個SocketError。你可以在上面的代碼中添加第二個救援。

+0

Thankyou,在我目前的項目中,由於主機是硬編碼的,所以沒有壞主機的機會。但無論如何,我會添加套接字錯誤。 – user1455116 2012-07-09 17:10:35