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 "$_"; }[EDIT] Connexion OK en SSH, mais pas suUse of uninitialized value in string at ./test_PCRF.pl line 243.
Problème : Prompt recopié après chaque commande dans le fichier et erreur Use of uninitialized value in string toujours active
[/EDIT]
@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.
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 "$_"; }
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 !
Partager