我有一个Rails应用程序,需要通过SSH与几个服务器进行通信。我正在使用 net :: ssh 图书馆和它的效果很好。但是,我希望能够以某种方式缓存/存储SSH连接(例如OpenSSH多路复用)。

所以,我不能将它们存储在 钥匙值商店 像备忘录或重复(因为SSH连接不可序列化)。

我不想将它们存储在 会议 因为它们本来应该被所有用户使用(而且我认为它也需要序列化)。

我设法与此合作 类变量初始化常数. 。我知道类变量不会在服务器之间复制(在生产中),而且我可以肯定的是,初始化器常数也不会。就像是:

初始化器:

SSH = {}

模型:

class Server
    def connection
        require 'net/ssh'
        SSH[name] ||= Net::SSH.start(ip, "root", :password => password)
    end
end

Openssh 多路复用 会很棒,但是我不确定是否可以通过NET :: SSH RUBY库来实现此操作(我又回到了在某个地方存储主连接)。

还有其他解决方案吗?还是没有,哪一个是所有人的最小邪恶?

有帮助吗?

解决方案

也许与其试图在请求中共享插座,这必定会造成痛苦和痛苦,而是可以将您委派给某种背景处理器?您可以设置一个SSH隧道并使用DRB对其进行交谈,就像它只是本地网络守护程序,或大量的网络异步工作处理守护程序。

http://ruby-toolbox.com/categories/queueing.html

其他提示

为了在请求之间保持SSH连接,您需要催生背景过程。背景过程可以打开管道或其他类型的 分解通信方法, ,您的手柄 能够 以序列化的方式存储。

请注意,这是一个非平凡的练习,这就是为什么我只用高级细节描述它的原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top