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

在Perl中将SSH对象传递给子例程,perl,function,ssh,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_file

我试图将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");
}

针对你的评论:


似乎我不能在$ssh对象上调用login方法两次,我必须创建$ssh对象的新实例作为$ssh2实例,然后在该实例上调用login。。有没有关于如何重新使用现有对象的想法


不能,一旦身份验证成功,SSH协议就不允许重新身份验证。如果要更改用户,必须打开新连接


注释中的回答是:

似乎我不能在$ssh对象上调用login方法两次,我必须创建$ssh对象的新实例作为$ssh2实例,然后在该实例上调用login。。有没有关于如何重用现有对象的想法?你不能,一旦身份验证成功,SSH协议不允许重新身份验证。如果你想更改用户,你必须打开一个新连接。谢谢@salva。现在可以了。刚刚创建了一个新的SSH对象。@salva愿意回答这个问题吗?