首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Net-ssh执行超时?

Net-ssh执行超时?
EN

Stack Overflow用户
提问于 2013-02-06 20:31:37
回答 4查看 6.5K关注 0票数 5

在我的应用程序中,我希望在指定的时间后终止SSH连接的exec!命令。

我找到了Net::SSH.start命令的:timeout,但按照文档说明,这只适用于初始连接。是否有与exec命令等效的命令?

我的第一个猜测不是使用exec!,因为这将等待命令完成,而是使用exec,并在调用周围使用一个循环,该循环检查每次迭代的执行状态,并在给定的时间量之后失败。

如果我对文档的理解正确的话,应该是这样的:

代码语言:javascript
复制
server = NET::SSH.start(...)

server.exec("some command")

start_time = Time.now
terminate_calculation = false

trap("TIME") { terminate_calculation = ((Time.now - start_time) > 60) }
ssh.loop(0.1) { not terminate_calculation }

然而,在我看来,这似乎是肮脏的。我希望是像server.exec("some command" { :timeout=>60})这样的东西。也许有一些内置的函数可以实现这个功能?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-06 21:04:26

我不确定这是否真的可以在SSH上下文中工作,但是Ruby本身有一个超时方法:

代码语言:javascript
复制
server = NET::SSH.start ...
timeout 60 do
  server.exec! "some command"
end

这将在60秒后引发Timeout::Error。查看the docs

票数 7
EN

Stack Overflow用户

发布于 2013-02-06 21:16:27

我不认为在net/ssh中有一种原生的方法来做这件事。参见the code,该选项没有额外的参数。

一种方法是在您调用的命令中处理超时-参见this answer on Unix & Linux SE

我认为你的方法更好,因为你不会在你连接的系统中引入外部依赖。

票数 1
EN

Stack Overflow用户

发布于 2013-06-24 20:30:01

另一种解决方案是在OpenSSH配置文件(~/.ssh/config,/etc/ssh,...)中设置ConnectTimeout选项

查看更多信息

https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/config.rb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14729173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档