将SSH对象传递给Perl中的子例程

时间:2015-01-26 16:09:12

标签: perl function ssh

我正在尝试将SSH对象传递给子例程。当我调用doSomething($ssh)时,此函数似乎挂起而不返回任何输出。

有什么想法吗?

提前致谢!

use strict;
use warnings;
use Net::SSH::Perl;

my $myHost  = 'localhost'; 
my @keyfile = "/home/myuser/.ssh/id_rsa";

my $ssh = Net::SSH::Perl->new(
    $myHost,
    identity_files => \@keyfile
);

$ssh->register_handler("stdout", sub {
    my ($channel, $buffer) = @_;
    print $buffer->bytes;
});


$ssh->login('userB');
my ($stdout, $stderr, $exit) = $ssh->cmd("whoami;hostname;pwd");

doSomething($ssh);

sub doSomething {
    my $sshref = shift;
    $sshref->login('userA');
    my ($stdout, $stderr, $exit) = $sshref->cmd("whoami;hostname;pwd");
}

1 个答案:

答案 0 :(得分:0)

回应你的评论:

  

好像我不能在$ ssh对象上调用两次登录方法,我必须创建一个$ ssh对象的新实例(如$ ssh2),然后在那个上调用login ..关于如何重新使用现有对象的想法?

您无法在身份验证成功后,SSH协议不允许重新进行身份验证。如果要更改用户,则必须打开新连接。

salva在评论中回答)