Ruby net-ssh-multi:在运行时将密码作为参数传递

我正在尝试使用net-ssh-multi在一组服务器上运行命令。 对于此taks,ssh-key身份validation不是一个选项; 必须将密码传递给session.use行中定义的每个服务器。 这是问题,’net / ssh’可以采用密码参数,但’net / ssh / multi’不能。 我想做的是像这样:

require 'net/ssh' require 'net/ssh/multi' #The necessary data is contained in a Ticket object my_ticket = Ticket.new Net::SSH::Multi.start (:password => 'xxxx') do |session| # define the servers we want to use my_ticket.servers.each do |serv_id| session.use "#{my_ticket.user_name}@#{serv_id}" end # execute commands on all servers session.exec "uptime" # run the aggregated event loop session.loop end 

但是,这让我:

file.rb:35:在`start’中:来自file.rb的参数数量错误(1为2)(ArgumentError):35

我知道这是一个n00b问题,但我真的很感激一些帮助。

(http://rubydoc.info/gems/net-ssh-multi/1.1/Net/SSH/Multi)

事实certificate,答案远比我想象的要简单得多。 仔细阅读文档,我在Class:Net :: SSH :: Multi :: Server docs中注意到了这一点:

类:Net :: SSH :: Multi :: Server

概述:

封装单个远程服务器的连接信息,以及与该信息对应的Net :: SSH会话。 你很少需要直接实例化其中一个:相反,你应该使用Net :: SSH :: Multi :: Session#use。

因此,不需要扩展类或调用超类。 以上可以通过以下方式完成:

 require 'net/ssh' require 'net/ssh/multi' #The necessary data is contained in a Ticket object my_ticket = Ticket.new Net::SSH::Multi.start do |session| # define the servers we want to use my_ticket.servers.each do |session_server| session.use session_server , :user => my_ticket.user_name , \ :password => my_ticket.user_pass end # execute commands on all servers session.exec my_ticket.command_to_do # run the aggregated event loop session.loop end