如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。