我正在尝试将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");
}
答案 0 :(得分:0)
回应你的评论:
好像我不能在$ ssh对象上调用两次登录方法,我必须创建一个$ ssh对象的新实例(如$ ssh2),然后在那个上调用login ..关于如何重新使用现有对象的想法?
您无法在身份验证成功后,SSH协议不允许重新进行身份验证。如果要更改用户,则必须打开新连接。
(salva在评论中回答)