5

私は現在、多くの短いSSH接続を確立する必要があるRuby(Rails)アプリケーションを持っています。これは、Ruby Net :: SSHライブラリを使用して正常に機能しますが、コマンドを実行するたびにアプリがログインしてキーをネゴシエートする必要があるため、速度が遅すぎます。

Ruby Net :: SSHでコントロールマスターを有効にする方法はありますか?コマンドラインでのテストでは、接続がすでに開いている(キーがネゴシエートされるなど)ため、これにより(最初のログインの後の)ログインが非常に高速になります。

Net :: SSHでこれを行う方法がない場合、誰かがそれを行うことができる代替ライブラリを提案できますか?

これは一般的な要件であるに違いないと思いますので、誰かが助けてくれることを願っています。

ありがとう!

4

2 に答える 2

5

接続を開いたままにしないのはなぜですか?私はAPIを知らないので、ssh呼び出しはダミーですが、それはその目的を果たします:

def ssh_execute(user, command)
  Thread.current[:user_connections] ||= {}

  unless Thread.current[:user_connections][user.id]
    Thread.current[:user_connections][user.id] = Net::SSH.connect(...)
  end

  ssh = Thread.current[:user_connections][user.id]
  ssh.run_command(command)
end

スレッドごとに1つのssh接続を取得するか、アプリケーションがパッセンジャーとともにデプロイされている場合、各プロセスは1つの接続を持ち、それを再利用します。

それはあなたが望むものですか?

于 2012-01-09T14:14:44.917 に答える
2

ハンドシェイクを最小限に抑えるために必要な暗号化プロトコルの種類を正確に指定できますが、スケールアップする必要がある場合は、SSHの速度が少し遅くなる可能性があります。

これに関する本当に興味深い見解はhttp://saltstack.org/です。これは、0mqの上に独自の「ssh」代替手段を実装し、複数のサーバーで並列コマンドを実行することを超高速にし、明らかにsshの同じ問題を抱えていません。シェフなどのような関連するパフォーマンスの問題。たぶん、あなたは塩の上に構築することができますか?

于 2012-01-09T11:25:44.587 に答える