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 :
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Voici mon code pour une exécution en parallèle :
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é...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager