简体   繁体   中英

Ruby Net::SSH infinity wait for password

I have a simple functional for run some command via ssh, here is an example:

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

It works OK except case when I forgot configure remote host (as example add key in ~/.ssh/authorized) and my app stuck on password request:

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:

How I can set timeout for this case or how I can exclude this case at all (raise some error?)

According to the documentation , the Net::SSH.start method accepts a :non_interactive => true option which should make your test (code) fail instead of asking for a password interactively. Other, non-interactive authentication options, such as the private key, will of course still work.

So, try this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM