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 !