IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

[reseaux] exécution de commande à distance


Sujet :

Programmation et administration système Perl

  1. #1
    Membre confirmé Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Par défaut [reseaux] exécution de commande à distance
    Bonjour,

    J'ai cherché un peu partout mais je n'ai malheureusement pas trouvé... Alors je poste ici.

    Alors voila je voulais savoir s'il était possible de lancer une commande de test (par exemple `mysqltest`) sur une machine distante, en ne connaissant que le nom de la machine (tout au plus l'adresse IP)?

    Le but du programme est un script perl qui tourne sur une machine et qui permet de tester si des services (par exemple mysql, tomcat, open converter...), tournant sur des machines distantes fonctionnent normalement.

    Voila
    Merci d'avance

  2. #2
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    réponse courte : non

    réponse longue : oui, à condition d'avoir installé un ssh ou un telnet sur la machine distante.

    Ensuite, tu peux executer des commandes à distances, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -l <user> <machine> "<commande distante>"
    et donc en perl tu peux le lancer grâce à la commande system

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $command = 'ssh -l <user> <machine> "<commande distante>"';
    my $result = system($command);
    print $result;

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    response complémentaire: le module IPC-PerlSSH automatise la chose de belle manière
    http://search.cpan.org/~pevans/IPC-PerlSSH/

  4. #4
    Membre confirmé Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Par défaut
    Merci pour vos réponse les gars mais après avoir réfléchi un peu je pense que je vais dans la mauvaise direction...

    Comme je l'ai dit le but de la chose est de tester l'état de services sur des machines. Des services comme Tomcat, mysql, open office, des daemons, open converter...
    Donc en fait pour chacun de ces services il faut que mon script perl regarde sur le port correspondant. Par exemple pour Tomcat tester si le port 8080 de la machine XXX est bien ouvert...

    C'est pour ça que l'idée de SSH n'est pas envisageable... En plus je ne connais pas forcément un utilisateur et son mot de passe sur chaque machine distante...

    Je me replonge dedans... Mais si de votre coté vous avez encore des idées n'hésitez pas... ;-)

    Merci

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2006
    Messages : 5
    Par défaut
    Salut, si tu es sur un réseau Windows, tu peux peut-être utilisé les call WMI.

    Je fais ça pour lancer des scripts sur des machines à distance. Voici la syntaxe:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    use strict;
    use Win32::OLE qw( in );
    use Win32::OLE::Variant;
     
    ################################################################################
    #
    # Fonction: Cette fonction est utilisée pour exécuter une commande sur un serveur
    # distant.
    #
    # Retour: Retourne 1 si la commande a été exécuter avec succès, sinon retourne 0.
    #
    # Argument: 1- Le permier argument est l'adresse machine du serveur sur lequel on veut
    #           exécuter la commande.
    #           2- Reçoit comme deuxième argument la commande à exécuter.
    #           3- Reçoit finalement les arguments pour cette commande.
    #
    # Commentaire: exemple d'argument . "perl c:/PerlTest.pl" WWW
    #              Ceci permet de tester l'exécution d'un script sur notre poste.
    #
    # Mathieu Roy
    # 2006-05-11
    #
    ################################################################################
    sub ExecuterUneCommandeAvecWMI {
    	my $sMachine = "";
    	$sMachine = "." unless( $sMachine = shift @_ );
    	$sMachine =~ s#^[\\/]+## if( $ARGV[0] =~ m#^[\\/]{2}# );
    	# This is the WMI moniker that will connect to a machine's 
    	# CIM (Common Information Model) repository
    	my $CLASS = "WinMgmts:{impersonationLevel=impersonate}!//$sMachine";
    	# Get the WMI (Microsoft's implementation of WBEM) interface
    	my $WMI = Win32::OLE->GetObject( $CLASS ) || die "Unable to connect to \\$sMachine:" . Win32::OLE->LastError();
    	# Now get a Win32_Process class object...
    	my $Process = $WMI->Get( "Win32_Process" ) || die "Unable to get the process list:" . Win32::OLE->LastError();
    	# Create a BYREF variant (so a COM object can modify its value and
    	# return it to us.
    	my $vPid = Variant( VT_I4 | VT_BYREF, 0 );
    	# Now go ahead and create the new process using the Create() method
    	# off of the Win32_Process object
    	if( 0 == $Process->Create( join( " ", @_ ), undef, undef, $vPid ) )
    	{
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    }
     
    Je l'appele comme suit: 
     
    if (ExecuterUneCommandeAvecWMI(X1X500,"\\\\a\\b\\c\\aspnet_setreg.exe", $sCommandeAExecuter) == 1 ) 
    {
    						$msDonneesFichierDeResultats .=  "ok";
    					}	
    					else
    					{
    						$msDonneesFichierDeResultats .=  "erreur...";
    					}	
    				}

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Citation Envoyé par philobedo
    Bonjour,

    J'ai cherché un peu partout mais je n'ai malheureusement pas trouvé... Alors je poste ici.

    Alors voila je voulais savoir s'il était possible de lancer une commande de test (par exemple `mysqltest`) sur une machine distante, en ne connaissant que le nom de la machine (tout au plus l'adresse IP)?

    Le but du programme est un script perl qui tourne sur une machine et qui permet de tester si des services (par exemple mysql, tomcat, open converter...), tournant sur des machines distantes fonctionnent normalement.

    Voila
    Merci d'avance


    utilise nagios

  7. #7
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 54
    Par défaut
    Salut,

    et si on voulais ne pas tapez le pass,et qu'on le pass dans la commande ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. commande dos à distance
    Par lesafir dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/07/2008, 15h44
  2. Commande a distance
    Par A_B dans le forum Sécurité
    Réponses: 3
    Dernier message: 21/06/2007, 21h37
  3. Exécuter une commande Terminal à distance
    Par parp1 dans le forum Réseau
    Réponses: 12
    Dernier message: 04/02/2007, 15h28
  4. Exécution des commandes à distance
    Par diamonds dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 07/12/2006, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo