/ / Ruby net-ssh-multi: Zur Laufzeit ein Passwort als Parameter übergeben - Ruby, Parameterübergabe, net-ssh

Ruby net-ssh-multi: Zur Laufzeit ein Passwort als Parameter übergeben - Ruby, Parameterübergabe, net-ssh

Ich versuche, net-ssh-multi zu verwenden, um einen Befehl auszuführenauf einer Gruppe von Servern. Für diese Zwecke ist die ssh-key-Authentifizierung keine Option. Ein Passwort muss an jeden in den session.use-Zeilen definierten Server übergeben werden. Hier ist das Problem, "net / ssh" kann einen Passwort-Parameter annehmen, "net / ssh / multi" jedoch nicht. Was ich gerne machen würde, ist Folgendes:

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

Das bringt mich jedoch:

file.rb: 35: in `start ': falsche Anzahl von Argumenten (1 für 2) (ArgumentError) von file.rb: 35

Ich weiß, dass dies eine n00b-Frage ist, aber ich würde mich wirklich über etwas Hilfe freuen.

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

Antworten:

1 für die Antwort № 1

Es stellt sich heraus, dass die Antwort viel einfacher ist, als ich gedacht hätte. Als ich die Dokumentation durchforstete, bemerkte ich dies in der Klasse: Net :: SSH :: Multi :: Server docs:

Klasse: Net :: SSH :: Multi :: Server

Überblick:

Verkapselt die Verbindung Informationen für aeinzelne Fernbedienung Server sowie das Net :: SSH Sitzung entsprechend Information. Sie werden selten brauchen instanziieren Sie eine dieser direkt: Stattdessen sollten Sie verwenden Net :: SSH :: Multi :: Session # verwenden. "

Daher sind keine Klassenerweiterung oder Aufrufe an Superklassen erforderlich. Das Obige kann mit folgenden Mitteln erreicht werden:

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

Verwandte Fragen


Kommentare (0)

Einen Kommentar hinzufügen