【发布时间】:2013-01-28 16:17:24
【问题描述】:
我正在使用Net::SSH 连接到另一台服务器。它工作正常,但我希望能够处理无法连接的情况。 Documentation 的方法没有提到异常,据我所知,它没有引发任何异常。在以下示例中,传递不存在且没有键的主机和用户不会引发异常。
我可以检查它是否失败的唯一方法是查看@session,它将为零,但这并没有告诉我失败的原因。
begin
@session = Net::SSH.start('no-host', 'no-user', keys: [])
rescue SocketError => e
connection_failed = true
logger.error "SOCKET ERROR: "+e.message
rescue Net::SSH::AuthenticationFailed
connection_failed = true
logger.error "AUTH ERROR: "+e.message
rescue Exception => e
logger.error "EXCEPTION: "+e.message
end
[更新] 在 irb 中运行以下命令会引发 SocketError:
> require 'net/ssh'
> Net::SSH.start('no-host', 'no-user', keys: [])
= SocketError: getaddrinfo: nodename nor servname provided, or not known
为什么这不会在我的应用中引发异常?
【问题讨论】:
-
您使用的是什么版本的 ruby?只是在 irb ruby-1.9.3p327 中尝试 SSH.start 的第二行,我得到异常“SocketError:initialize:name or service not known”。在 Rails 控制台中也能正常工作。
-
@agmcleod 我在 1.9.3-p194 上,是的,你是对的。在 irb 我得到一个例外,但在应用程序中我没有。
-
我也有同样的问题。如果我使用了不正确的密码,则会引发异常,但当我的凭据正确时,它会创建一个立即关闭的连接,但我无法找出为什么它会立即关闭。
标签: ruby-on-rails ruby exception ssh net-ssh