Ruby Net::SSH无限等待密码

Ruby Net::SSH infinity wait for password

我有一个简单的功能 运行 通过 ssh 的一些命令,这里是一个例子:

...
Net::SSH.start( self.host, self.user, config: true, keys: [self.pem_key] ) do| ssh |
  result = ssh.exec! self.command
  ...

它工作正常,除非我忘记配置远程主机(例如在 ~/.ssh/authorized 中添加密钥)并且我的应用程序卡在密码请求上:

Completed 200 OK in 246ms (Views: 238.1ms | ActiveRecord: 4.3ms)

Started POST "/xxx" for ::1 at 2016-05-24 13:43:11 +0300
Processing by XXX::XXXController#run_now as JS
Parameters: {"id"=>"2"}
XXX::Check Load (0.3ms)  SELECT  ...
(0.1ms)  BEGIN
SQL (0.3ms)  UPDATE ...
(0.3ms)  COMMIT
Text will be echoed in the clear. Please install the HighLine or Termios libraries to suppress echoed text.
some_user@some_host's password:

如何为这种情况设置超时或完全排除这种情况(引发一些错误?)

根据 documentationNet::SSH.start 方法接受 :non_interactive => true 选项,这应该使您的测试(代码)失败而不是交互式地询问密码。其他非交互式身份验证选项(例如私钥)当然仍然有效。

所以,试试这个:

Net::SSH.start(self.host, self.user, config: true, non_interactive: true, keys: [self.pem_key]) do| ssh |
  ...
end