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 :

Ecriture dans un fichier et prompt


Sujet :

Programmation et administration système Perl

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut Ecriture dans un fichier et prompt
    Bonjour,

    Je dois récupérer des informations sur plusieurs machines à distance. Pour ce faire, je dois me connecter sur chacune et lancer des commandes et scripts pour récupérer ces informations.

    Lorsqu'il n'y a que des commandes, je sais comment faire, j'utilise une fonction du package net::OpenSSH $ssh->capture et je récupère le résultat de la commande que je balance dans un fichier.

    Quand c'est pour des scripts intéractifs, j'utilise Net::SSH::Expect :

    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
     
    my $ssh = Net::SSH::Expect-> new (
            host => "x.x.x.x",
            password => "pass",
            user => "user",
            raw_pty => 1,
    );
     
    my $login_output=$ssh->login();
    $ssh->send("su login");
    $ssh->waitfor('password:',10) or die "prompt 'password' not found after 10 seconds";
    $ssh->send($pass);
    @output = $ssh->exec("route -n");
    foreach (@output)
    {
            print FILE "$_";
    }
    Use of uninitialized value in string at ./test_PCRF.pl line 243.
    [EDIT] Connexion OK en SSH, mais pas su
    Problème : Prompt recopié après chaque commande dans le fichier et erreur Use of uninitialized value in string toujours active
    [/EDIT]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @res = $ssh->exec("cat /etc/xxx/xxx.conf");
    foreach (@res)
    {
            print FILE "$_";
    }
    @res est uninitialized ?! Etrangement, j'ai fais exactement la même chose sur d'autres fichiers et ça marche. De plus, quand je le fais à la main, ça fonctionne.

    résultat du fichier :

    xx - bonding.conf

    su: incorrect password
    ^[]0;login@machine:~^G[login@machine ~]$ alias .... bonding
    alias .... bonding

    xx - network

    ^[]0;login@machine:~^G[login@machine ~]$ NETWORKING=yes
    HOSTNAME=machine
    GATEWAY=@IP
    NOZEROCONF=1
    NETWORKING_IPV6=no

    Merci !

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ssh->send("su login");
    $ssh->waitfor('password:',10) or die "prompt 'password' not found after 10 seconds";
    J'ai un problème à ce niveau là (dixit au-dessus) :
    prompt 'password' not found after 10 seconds
    Alors que le login et mot de passe sont bons.

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Désolé je ne peux pas faire l'essai, Net::OpenSSH ne tourne pas sous Windows et mes Perl-Linux ne sont pas à niveau
    Et ne peux donc faire que Windows->Linux.
    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ssh->send("/bin/su login");
    ...
    Ou tout ce qui pourrait nuire en pb de $PATH...

    En remote on n'a pas toujours $PATH initialisé...

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Salut,

    Je viens d'essayer à l'instant, sans succès

    Entre-temps j'ai essayé autre chose. Je ne cherche plus à me connecter une 2ème fois mais d'utiliser sudo. Mais il fallait que je renseigne un tty car il est requis de base dans la config du sudoers et je ne peux pas passer l'argument -t comme je passe par OpenSSH...

    Pour en revenir au problème actuel,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ssh->waitfor('Password:\s*',30) or warn "MARCHE PAS PASSWORD: $!";
    est exactement la syntaxe que j'ai lorsque je le tape directement sur la remote machine. J'effectue le test en ROOT, j'ai effectué le test avec un autre compte mais sans succès non plus...

  5. #5
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Et qu'est-ce qui t'empêches de te connecter directement avec le bon login, puisque là ça fonctionne ?

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    J'ai besoin de récupérer le résultat de la commande route -n qui doit être exécutée soit en root (sur le compte root) soit avec sudo sur un autre compte.

    Pour résumé c'est soit je me connecte à distance avec root pour exécuter cette commande soit je me connecte avec un autre compte mais je lance sudo route -n.
    Dans les deux cas j'ai un problème que je n'arrive pas à régler à l'heure actuelle

  7. #7
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    OK, comme je ne peux pas faire d'essai pour le moment, je ne te fais pas perdre d'avantage de temps !
    Si j'ai une lumière je reviens...
    Mais sans possibilité d'essais je redoute... j'écris de plus en plus de bêtises... c'est ce cochon Alzheimer qui prend le dessus
    @+

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Merci beaucoup tout de même pour l'essai

    Je continue de creuser dans les tréfonds d'internet

  9. #9
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bon j'en mets une petite couche, mais tu ne perds pas de temps à répondre si je suis à côté de la plaque...

    1) finopat avait ouvert un discussion similaire ICI NB : Net::SSH2 tourne aussi depuis Windows, Net::OpenSSH NON !
    2) Y a-t-il qqc qui te fasses utiliser Net::OpenSSH plutôt que Net::SSH2 ?
    3) le script de finopat un peu corrigé à la louche :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
     
    #execute une serie de commandes sur des equipements
    #les commandes sont a mettre dans le fichier liste.commande
    #pas de ligne vide
    #les lignes commencant par # ne sont pas prises en compte
    #la liste des equipements est dans le fichier liste.routeurs
    #ATTENTION la premiere ligne n'est pas prise en compte par le script
     
    use Net::Telnet;
    use Time::HiRes qw(usleep);     #pour faire une tempo en microsec
    use Net::SSH2;
     
    # Demande log/password
    my $user = "";
    do {
    	print "\nEntrez login : ";
    	chomp($user = <STDIN>);
    } while $user eq "";
     
    my $passwd = "";
    do {
    	print "\nEntrez le mot de passe : ";
    	system('stty','-echo'); #Hide console input for what we type
    	chomp($passwd = <STDIN>) ;
    	system('stty','echo'); #Unhide console input for what we type
    } while $passwd eq "";
     
    #Chargement du fichier de hosts
     
    print "\nChargement du fichier contenant la liste des equipements...";
     
    my $ListeHosts = "liste.routeurs" ;
     
    open(my $LISTEHOSTS, "<:utf8", $ListeHosts ) || die "\nNe peux lire le fichier $ListeHosts: $!";
    my @hosts = <$LISTEHOSTS> ;
    close($LISTEHOSTS) ;
    print "OK\n";
     
    #Chargement du fichier de commandes
    print "\nChargement du fichier contenant la liste des commandes 'liste.commandes'...";
    my $ListeCommandes = 'liste.commandes' ;
    open(my $LISTECOMMANDES, "<:utf8", $ListeCommandes ) || die "\nNe peux lire le fichier $ListeCommandes: $!";
    my @commandes = <$LISTECOMMANDES> ;
    close($LISTECOMMANDES) ;
    print "OK\n";
     
    #création fichier log
    # Appel de la fonction localtime
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    $year+=1900; # ajout de 1900 a l'annee
    $mon+=1; # ajout de 1 au mois car le premier est zero
    print "\nCreation du fichier de log...";
    open(my $LOG_FILE, ">:utf8", "./log.${year}${mon}${mday}${hour}${min}") || die "\nNe peux ecrire dans le fichier log: $!";
    print "OK\n\n\n";
     
    print $LOG_FILE "Liste des commandes :\n\n";
    foreach my $commande (@commandes) {
    	last if $commande eq "\n" ; # Arret sur la premiere ligne vide
    	next if $commande =~ /^#/; # va a la ligne suivante si commentaire
    	chomp ($commande); # suppresion du caractere \n
    	print $LOG_FILE "$commande\n";
    }
    print $LOG_FILE "--------------------------------------------------------------------------------------------------------------------\n";
     
    foreach my $host (@hosts) {
    	chomp ($host);
    	last if $host eq "\n";
    	next if $host =~ /^#/ ;
    	print $LOG_FILE "--------------------------------------------------------------------------------------------------------------------\n\n";
    	print $LOG_FILE "Host : $host\n";
     
    	#connection
    	my $ssh = Net::SSH2->new();
    	if(!$ssh->connect($host))
    	{
    		print $host . " Connexion impossible : $!\n";
    		print $LOG_FILE "Connexion impossible : $!\n" ;
    		next;
    	}
     
    	if(!$ssh->auth_password( $user, $passwd))
    	{
    		print $host . " Authentication Failed : $!\n";
    		exit(1);
    		print $LOG_FILE "Authentication Failed : $!\n" ;
    		next;
    	}
     
    	my $channel = $ssh->channel();
    	$channel->blocking(0);
    	$channel->shell();
     
    	#passage des commandes
    	foreach my $commande (@commandes)
    	{
    		chomp($commande);
    		print $channel "$commande\n";
    		while (<$channel>)
    		{
    			print $LOG_FILE "$_"."\n";
    		}
    		usleep(100000); # pause de 100  milisecondes entre chaque commande
    	}
     
    } # Fin de la boucle globale passage HOST suivant
    close $LOG_FILE;
    Le fichier liste.routeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #192.168.1.12
    192.168.1.13
    #192.168.18.250
    le fichier des liste.commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #Dummy_Line
    #show interfaces descriptions
    #show version
    ls -l
    #ps -ef
    route -n
    et enfin le log log.201412151533 :
    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
    Liste des commandes :
     
    ls -l
    route -n
    --------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------
     
    Host : 192.168.1.13
    Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64)
     
     
     
     * Documentation:  https://help.ubuntu.com/
     
     
     
    total 44
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Bureau
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Documents
     
    -rw-r--r-- 1 dufour dufour 8980 juin  12  2014 examples.desktop
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Images
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Modèles
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Musique
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Public
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Téléchargements
     
    drwxr-xr-x 2 dufour dufour 4096 juin  12  2014 Vidéos
     
    Table de routage IP du noyau
     
    Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
     
    0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
     
    192.168.1.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0
    NB : route -n est lancé par un utilisateur lamda

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Ça a pas l'air mal du tout, merci beaucoup de passer du temps pour m'aider !

    J'aurais une question par rapport au thread de finopat :
    - Est-ce que Net::SSH2 fait de l'expect ? Càd qu'il permet de lancer des scripts interactifs (du type rentrer un mot de passe ou autre...) ?

    Pour ce qui est du route -n, il n'est pas accessible par n'importe quel compte de mon côté malheureusement, les droits sont 550 :/ et d'après ce que je vois les groupes sont plus ou moins égaux aux comptes.

  11. #11
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Est-ce que Net::SSH2 fait de l'expect ? Càd qu'il permet de lancer des scripts interactifs (du type rentrer un mot de passe ou autre...) ?
    A première vue NON

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Pour en revenir à SSH2 je ne me suis pas vraiment posé la question étant donné que toutes les machines que j'utilise sont actuellement des Platons. J'ai vu que Net::OpenSSH était relativement facile d'utilisation et fonctionnel, c'est pour cela que je me suis tourné vers ce module.

    Il me semblait aussi que d'après ce que j'avais lu il n'y avait pas d'interactivité , néanmoins ton post reste tout de même très intéressant.

    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
    my $res;
    my @res;
     
    $ssh = Net::SSH::Expect->new (
            host => "@IP",
            password => "pass",
            user => "login",
            raw_pty => 1
    ) or die "Il y a un problème à ce niveau la\n";
     
    my $login_output = $ssh->login();
     
    print "Connexion OK\n";
     
    $ssh->send("su root") or warn "Remote command failed";
    my $test = $ssh->waitfor('Password:\s*',30) or warn "MARCHE PAS PASSWORD: $!";
    print "test = $test !";
    $ssh->send($password) or warn "PASSWORD NOT SENDED: $!";
    Chose incroyable avec ce code que je suis en train de tester c'est qu'il m'affiche le warn de $ssh->send("su root") alors que je ne vois pas qu'est ce qui ne va pas... Ce module est en train de me rendre fou.

    Chose encore plus incroyable c'est que la variable $test contient 1 c'est à dire que la chaîne de caractères à été trouvée !
    EDIT :
    http://search.cpan.org/~bnegrao/Net-...SSH/Expect.pod
    Ça devrait être bon maintenant

  13. #13
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Moi non plus, d'autant que je ne peux pas tester, et je n'arrive plus à compiler de neurone
    Un pb de droit, d'autorisation... "su root" les Linux maintenant bétonnent...

    Chose encore plus incroyable c'est que la variable $test contient 1 c'est à dire que la chaîne de caractères à été trouvée !
    elle est belle celle-là !

    Je ne connaissais pas, c'est intéressant !

    [EDIT 16:35] Je déconnecte pour l'instant,
    @+ Bonne continuation !

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    L'erreur venait d'un manque de tempo après la connexion, la machine n'avait pas le temps de se connecter que j'envoyais déjà des commandes à taper.

    Du coup pour résoudre le problème il suffit juste de rajouter un sleep() ou un waitfor(prompt) entre la connexion et la première commande !!!

    Merci en tout cas pour ton aide !

  15. #15
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    MERCI surtout à toi pour le retour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ssh->waitfor('Password:\s*',30)
    Autrement-dit augmenter le temps du waitfor ne suffit pas ? il faut obligatoirement un sleep ?

    [EDIT] à non vu :
    manque de tempo après la connexion
    MERCI !

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Ce waitfor te permet seulement d'attendre la chaîne Password:

    Le sleep/waitfor que j'ai dû ajouter se situe après :
    Pour plus de propreté, j'ai préféré le waitfor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ssh->waitfor(']#\s*\z',10) or die "prompt not found\n";
    C'est ce bout de code qui est important car il permet d'attendre l'affichage du prompt avant le lancement de toute commande.

    De plus, je rajouterai qu'il ne faut pas mettre de warn/die/... dans un send, il effectue tout le temps le warn/die/... mais marche tout de même, étrange n'est-ce pas ?

  17. #17
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    OK MERCI, ça pourra servir !

    Bye !

    Puisque tu es encore là, j'en ajoute une petite :

    Pour faire un "su root" en remote as-tu eu besoin d'ajouter des autorisations dans /etc/host.allow par exemple ?
    Sinon ça me semble limite au niveau sécurité...

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Pour terminer, j'avais parlé de l'affichage du prompt qui était dérangeant, il est relativement simple à virer en fait !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ssh->send("cat /home/test");
    while (my $line = $ssh->read_line())
    {
            print FILE "$line\n";
    }
    $ssh->eat($ssh->peek(0));
    la dernière ligne permet de "manger" l'affichage du prompt ce qui retourne dans le descripteur de fichier FILE seulement la commande !

    @dmganges :
    Pour le su root :
    J'ai dû au préalable me connecter un pseudo compte admin pour pouvoir faire le su - ou su root ce qui limite quand même la faille de sécu mais qui reste une faille. Personnellement l'application reste en interne donc il y a peu de chance que celà soit dangereux.
    Sinon, ce que tu peux faire c'est sudo avec ta commande mais il faudra au préalable modifier le sudoers.

    J'espère avoir répondu à ta question !

    Voilà voilà pour la postérité !

  19. #19
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    OK MERCI BEAUCOUP

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

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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