ruby on rails ssh连接检查有效性

时间:2012-07-09 15:54:23

标签: ruby-on-rails ruby-on-rails-3 net-ssh

我正在我的控制器中建立一个ssh连接,并在成功建立连接时显示一个视图。 如果未建立连接,我需要我的操作重定向到'denied_access'视图 以下是我使用输入其详细信息的视图:

<%= 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。 我怎么能这样做?

1 个答案:

答案 0 :(得分: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。您可以为上面的代码添加第二次救援。