【问题标题】:Ruby net-ssh-multi: passing a password as a parameter at runtimeRuby net-ssh-multi:在运行时将密码作为参数传递
【发布时间】:2011-05-30 08:07:24
【问题描述】:

我正在尝试使用 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:in `start': 来自 file.rb:35 的参数数量错误(1 对 2)(ArgumentError)

我知道这个问题有点小题大做,但我非常感谢您的帮助。

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

【问题讨论】:

    标签: ruby parameter-passing net-ssh


    【解决方案1】:

    事实证明,答案比我想象的要简单得多。仔细阅读文档,我在 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
    

    【讨论】:

    • 谢谢,@AbeVoelker。我希望这是我的代码中最少令人尴尬的事情。
    • 哈抱歉,我不是想在那里变幻无常。我在 Ruby 方面还不够称职,还不能评论它的有效性。但它确实看起来很多比我在以前的工作中必须使用的 Expect/Tcl 脚本来解决我们无法使用 SSH 密钥(也无法使用 Ruby 或 Perl)的问题。 :-)
    • @AbeVoelker 不用担心,如果我被抓到“高峰”而不是“激怒”,我会脸红
    猜你喜欢
    • 2017-09-21
    • 2015-04-07
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2011-01-28
    • 2017-12-25
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多