CPAN::Forum
Net-SSH2 - net::ssh2::channel utilisation
| Posted on Tue Dec 18 14:17:51 2007 by cpla |
| net::ssh2::channel utilisation |
|
hi,
I try to use Net::SSH2 to build a specific process (to get alarm) for parsing on the
"sys_549" server the result of a "vmstat" command that is executed on the "test_server".
My problem is that :
when I execute "vmstat 60 99999" with a "channel shell" , I receive only the first 3 lines like with the "vmstat" command.
when I execute "vmstat 60 99999" with a "channel exec" , I have to wait the end of the "vmstat 60 99999" command to receive the all the lines at the same time. (in fact I do'nt wait. It's to long)
My wish is to receive each line of data from the "vmstat 60 99999" one after each over like in a manual ssh session every 60 seconds (second part of the log file).
Could you explain me where is my mistake ?
You will find hereunder the perl script and the log file that illustrate my purpose.
#!/usr/bin/perl
#
use Net::SSH2;
use warnings;
use strict;
use Data::Dumper;
use Text::ParseWords;
my $server="test_server";
my $user="test_ruser1";
my $password="pwd_ruser1";
my $code="";
my $error_name="";
my $error_string="";
my $sortie="";
my $chan1="";
my $ssh2=Net::SSH2->new();
my $debug=0;
$ssh2->debug(0);
# connect
print "Connection to $server\n";
$ssh2->connect($server) or die "Unable to connect Host $@ \n";
( $code, $error_name, $error_string ) = $ssh2->error();
if ($code ne 0) {
print "code = $code\n";
print "error_name = $error_name\n";
print "error_string = $error_string\n";
} else {
if ($debug > 0) {print "Connection OK\n";}
}
# authenticate
print "Authentification with the user $user\n";
$ssh2->auth_password($user,$password) or die "Unable to login $@ \n";
( $code, $error_name, $error_string ) = $ssh2->error();
if ($code ne 0) {
print "code = $code\n";
print "error_name = $error_name\n";
print "error_string = $error_string\n";
} else {
if ($debug > 0) {print "Authentification OK\n";}
}
# DEBlock SSH2 for channel open
if ($debug > 0) {print "DeBlocking SSH2\n";}
$ssh2->blocking(1);
# open channel
if ($debug > 0) {print "Open Chan1\n";}
$chan1 = $ssh2->channel();
( $code, $error_name, $error_string ) = $ssh2->error();
if ($code ne 0) {
print "code = $code\n";
print "error_name = $error_name\n";
print "error_string = $error_string\n";
} else {
if ($debug > 0) {print "open chan1 OK\n";}
}
# Block SSH2 for channel shell
if ($debug > 0) {print "Blocking SSH2\n";}
$ssh2->blocking(0);
( $code, $error_name, $error_string ) = $ssh2->error();
if ($code ne 0) {
print "code = $code\n";
print "error_name = $error_name\n";
print "error_string = $error_string\n";
} else {
if ($debug > 0) {print "Blocking OK\n";}
}
# start channel shell
$chan1->shell();
print $chan1 "\n";
print "LINE1 : $_" while <$chan1>;
print $chan1 "vmstat\n";
print "LINE2 : $_" while <$chan1>;
print $chan1 "vmstat 60 99999\n";
print "LINE3 : $_" while <$chan1>;
# close channel shell
$chan1->close;
exit;
and the log of the session :
Console log with the perl process :
[sup_user@sys_549 test]$ ./test_vmstat_ssh2.pl
Connection to test_server
Authentification with the user test_ruser1
LINE1 : Hewlett-Packard Company
LINE1 : 3000 Hanover Street
LINE1 : Palo Alto, CA 94304 U.S.A.
LINE1 : Rights for non-DOD U.S. Government Departments and Agencies are as set
LINE1 : forth in FAR 52.227-19(c)(1,2).
LINE2 : procs memory page faults cpu
LINE2 : r b w avm free re at pi po fr de sr in sy cs us sy id
LINE2 : 1 0 0 89323 3306686 121 19 0 0 0 0 0 1621 4377 530 0 1 99
LINE3 : procs memory page faults cpu
LINE3 : r b w avm free re at pi po fr de sr in sy cs us sy id
LINE3 : 1 0 0 89323 3306530 121 19 0 0 0 0 0 1621 4377 530 0 1 99
[sup_user@sys_549 test]$
****************************************************************************************************************
Console log when connected to the remote server :
[sup_user@sys_549 test]$ ssh test_ruser1@test_server
test_ruser1@test_server's password:
Last login: Thu Dec 13 06:00:27 2007 from s00998d-adm.pro
Hewlett-Packard Company
3000 Hanover Street
Palo Alto, CA 94304 U.S.A.
Rights for non-DOD U.S. Government Departments and Agencies are as set
forth in FAR 52.227-19(c)(1,2).
$ vmstat
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
1 0 0 93670 3306409 121 19 0 0 0 0 0 1621 4377 530 0 1 99
$ vmstat 1 5
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
1 0 0 93670 3306409 121 19 0 0 0 0 0 1621 4377 530 0 1 99
1 0 0 93670 3306409 8 0 1 0 0 0 0 1614 1121 431 0 0 100
1 0 0 95526 3306358 6 0 1 0 0 0 0 1618 1026 432 0 0 100
1 0 0 95526 3306358 4 0 1 0 0 0 0 1620 964 430 0 0 100
1 0 0 95526 3306358 3 0 1 0 0 0 0 1618 912 428 0 0 100
$ exit
logout
Connection to test_server closed.
[sup_user@sys_549 test]$
Thanks in advance for your help.
Charles.
|
| Write a response |
(2)
]