将ssh连接存储在rails中

时间:2011-01-21 18:40:04

标签: ruby-on-rails ruby caching ssh net-ssh

我有一个需要通过ssh与几台服务器通信的rails应用程序。我正在使用 Net :: SSH 库,效果很好。但是,我希望能够以某种方式在请求之间缓存/存储ssh连接(类似于OpenSSH复用)。

因此,我无法将它们存储在像> Redis那样的键值存储中(因为ssh连接不可序列化)。

我不想将它们存储在会话中,因为它们应该被所有用户使用(此外我认为它也需要可序列化)。

我设法使用类变量 initiliazer常量。我知道类变量不会在服务器之间复制(在生产中),而且我很确定初始化器常量也没有。类似的东西:

初​​始化:

SSH = {}

模型:

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

OpenSSH 多路复用会很棒,但我不确定我是否可以通过Net :: SSH ruby​​库(我回到某处存储主连接)。

还有其他解决方案吗?或者如果没有,哪一个是最不邪恶的呢?

2 个答案:

答案 0 :(得分:1)

或许不是尝试在请求之间共享套接字,而这些请求最终会导致痛苦和痛苦,您可以委托给某种类型的后台处理器?您可以设置一个ssh隧道并使用DRb进行通信,就好像它只是一个本地网络守护程序,或任何大量联网的异步作业处理守护进程。

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

答案 1 :(得分:0)

要在请求之间保持SSH连接,您需要生成后台进程。后台进程可以打开一个管道或其他类型的interprocess communication method,即可以以可序列化的方式存储的句柄。

请注意,这是一项非常重要的练习,这就是为什么我只是在高级细节上进行描述。