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

| 我正在尝试使用net-ssh-multi在一组服务器上运行命令。对于此任务,不能选择使用ssh-key身份验证。必须将密码传递给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:35的参数数目错误(1为2)(ArgumentError) 我知道这是一个n00b问题,但是我非常感谢您的帮助。 (http://rubydoc.info/gems/net-ssh-multi/1.1/Net/SSH/Multi)     
已邀请:
        原来答案比我想象的要简单得多。浏览文档,我在类中注意到了这一点:Net :: SSH :: Multi :: Server文档:   类别: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
    

要回复问题请先登录注册