Connexion SSL multiple - Librairie SSH-net/Multi
Bonjour à tous,
Avant de commencer, voici le lien vers l'API : http://net-ssh.github.com/multi/v1/api/index.html
Mon projet consiste actuellement à réaliser un script permettant des connexions SSL sur de multiples serveurs et de leur envoyer une commande shell (on va considérer que je ne travaille que sur du Linux). J'ai déjà réussi à faire cela de manière séquentielle : chaque connexion est crée, puis la commande est envoyée, et ce serveur par serveur. Long, fastidieux, voici le code source :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| require 'rubygems'
require 'net/ssh'
HOSTLIST = ['198.0.0.1','127.0.0.1']
USER = 'user'
PASSWORD = 'userpegase'
TIMEOUT = 3
HOSTLIST.each do |host|
begin
Net::SSH.start(host, USER, :password => PASSWORD, :timeout => TIMEOUT) do |ssh|
output = ssh.exec!('ls')
puts output
end
rescue Timeout::Error
puts "Timed out"
rescue Errno::EHOSTUNREACH
puts "Host unreachable"
rescue Errno::ECONNREFUSED
puts "Connection refused"
rescue Net::SSH::AuthenticationFailed
puts "Authentification failure "
end
end |
Cela fonctionne très bien, les exceptions sont même gérées. Donc si je rentre une adresse bidon de serveur, une exception est levée et j'ai un Timeout (dans cet exemple).
Voici mon code pour une exécution en parallèle :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| require 'rubygems'
require 'net/ssh/multi'
HOSTLIST = ['128.0.0.1','127.0.0.1']
USERLIST = ['user','user']
PASSWORD = ['userpegase','userpegase']
Net::SSH::Multi.start(:on_error => :warn) do |session|
HOSTLIST.each_with_index do |session_server,index|
session.use session_server , :user => USERLIST[index] , :password => PASSWORD[index]
end
session.exec 'pwd' do |ch, stream, data|
puts "[#{ch[session]} : #{stream}] - #{data}"
end
session.loop
end |
Le problème étant qu'ici, si je rentre une adresse bidon, le programme reste bloqué au session.exec, puisque la connexion est nulle... Ca parait logique. Ainsi, ici, je ne vois pas du tout comment gérer les exceptions précédemment citées... D'ailleurs le :on_error => :warn ne semble pas fonctionner puisque je n'ai absolument rien, simplement un shell qui tourne à l'infini en attente d'une connexion j'imagine... Je suis débutant en Ruby et j'avoue avoir un peu de mal... Or dans le cas d'une connexion séquentielle je voyais très bien comment gérer les exceptions, or dans le cas présent je suis complètement bloqué...
Si quelqu'un a une idée, je le remercie grandement. Je remercie également toute personne ayant pris le temps de lire mon message, même si aucune idée.
Bonne journée.
timeout pour gérer l'exception
Bonjour,
Je suis aussi débutant en Ruby.
As tu essayé de gérer une exception avec un timeout?
Il semble que ce soit une bonne pratique en ruby pour éviter d'avoir un code bloqué.
http://ph7spot.com/musings/system-timer
Je suis aussi intéressé par le connexions SSL
Tiens nous au courant de l'évolution de ton programme.
Lunart