Automatiser vos serveurs : Un guide pratique pour se connecter en SSH avec Ruby (Partie 2)
Dans la première partie de ce guide, nous avons vu comment utiliser Ruby pour se connecter en SSH à un serveur et exécuter une commande simple. Le hic ? Les informations de connexion et la commande étaient figées dans le code.
Pas très pratique pour automatiser plusieurs serveurs, n’est-ce pas ?
C’est là que la magie des arguments en ligne de commande entre en jeu ! Dans cette deuxième partie, on vous montre comment rendre votre script Ruby plus flexible et puissant.
Libérez la puissance des arguments en ligne de commande
Imaginez : un seul script pour gérer tous vos serveurs ! En utilisant les arguments en ligne de commande, vous pouvez spécifier l’hôte, le nom d’utilisateur, le mot de passe et la commande à exécuter directement lors de l’appel du script.
Fini la modification du code à chaque connexion !
Voici comment faire :
require 'rubygems'
require 'net/ssh'
require 'optparse'
# On crée un objet OptionParser pour gérer les arguments
opts = OptionParser.new
# On définit les options possibles
opts.on("-h HOSTNAME", "--hostname NAME", String, "Nom d'hôte du serveur") { |v| @hostname = v }
opts.on("-u SSH USERNAME", "--username SSH USERNAME", String, "Nom d'utilisateur SSH") { |v| @username = v }
opts.on("-p SSH PASSWORD", "--password SSH PASSWORD", String, "Mot de passe SSH") { |v| @password = v }
opts.on("-c SHELL_COMMAND", "--command SHELL_COMMAND", String, "Commande à exécuter") { |v| @cmd = v }
# On analyse les arguments passés en ligne de commande
begin
opts.parse!(ARGV)
rescue OptionParser::ParseError => e
puts e
end
# On vérifie que tous les arguments obligatoires sont présents
raise OptionParser::MissingArgument, "Nom d'hôte manquant [-h]" if @hostname.nil?
raise OptionParser::MissingArgument, "Nom d'utilisateur SSH manquant [-u]" if @username.nil?
raise OptionParser::MissingArgument, "Mot de passe SSH manquant [-p]" if @password.nil?
raise OptionParser::MissingArgument, "Commande à exécuter manquante [-c]" if @cmd.nil?
# On se connecte au serveur et on exécute la commande
begin
ssh = Net::SSH.start(@hostname, @username, :password => @password)
res = ssh.exec!(@cmd)
ssh.close
puts res
rescue
puts "Impossible de se connecter à #{@hostname} avec #{@username}/#{@password}"
end
Exemple d’utilisation
Pour exécuter le script et lister le contenu du répertoire courant sur le serveur “monServeur” avec l’utilisateur “admin”, utilisez la commande suivante :
ruby mon_script.rb -h monServeur -u admin -p monMotDePasse -c "ls -al"
Un pas de plus vers l’automatisation
Ce script amélioré vous permet de gérer vos serveurs à distance de manière plus efficace. N’hésitez pas à l’adapter à vos besoins spécifiques en modifiant la commande à exécuter ou en ajoutant de nouvelles options.
Astuce de pro: Pour encore plus de sécurité, envisagez d’utiliser des clés SSH au lieu de stocker le mot de passe en clair dans votre script.
Envie d’aller plus loin dans l’automatisation avec Ruby ? Découvrez comment utiliser des bibliothèques comme “Fabric” ou “Capistrano” pour déployer vos applications web en un clin d’œil !
One thought on “Connectez-vous à vos serveurs facilement avec Ruby et SSH”