Вопрос

У меня есть приложение Rails, которое необходимо общаться с парой серверов через SSH. Я использую Net :: ssh Библиотека, и она отлично работает. Однако я бы хотел, чтобы каким -то образом имел возможность каким -то образом кэшировать/хранить соединения SSH между запросами (что -то вроде мультиплексирования Opensh).

Итак, я не могу хранить их в Магазин ключей как Memcached или Redis (потому что SSH -соединения не являются сериализуемыми).

Я не хочу хранить их в сессия Потому что они предназначены для использования всеми пользователями (и, кроме того, я думаю, что это должно быть также сериализуемо).

Мне удалось заставить это работать с классовые переменные а также Константы initiliazer. Анкет Я знаю, что переменные класса не реплицируются между серверами (в производстве), и я почти определенные константы инициализатора также нет. Что-то типа:

Инициализатор:

SSH = {}

модель:

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

OpenSsh мультиплексирование Было бы здорово, но я не уверен, смогу ли я сделать это через сеть :: SSH Ruby Library (я вернулся где -нибудь хранить главное соединение).

Есть ли другие решения? Или если нет, то какое из них является наименее злом?

Это было полезно?

Решение

Возможно, вместо того, чтобы пытаться поделиться гнездами по запросам, которые обязательно должны причинять боль и страдания, которые вы могли бы делегировать в какой -то фоновый процессор? Вы можете настроить туннель SSH и использовать DRB, чтобы общаться через него, как будто это был просто локальный сетевой демон или любое из большого количества сетевых асинхронных рабочих мест.

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

Другие советы

Чтобы поддерживать соединение SSH между запросами, вам нужно вытекать из фонового процесса. Фоновый процесс может открыть трубу или какой -то другой вид Межпроцессная связь, ручка, которой вы Можно Хранить сериализуем.

Обратите внимание, что это нетривиальное упражнение, поэтому я описал его только в деталях высокого уровня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top