6

我正在尝试使用 Net::SSH::Perl 编写 perl 脚本

目前它非常简单,因为我只想通过 ssh 在目录中执行 ls。

#!/usr/bin/perl

use Net::SSH::Perl;

@KEYFILE = ("/user/.ssh/id_rsa");
$ssh = Net::SSH::Perl->new($host, debug=>1, identity_files=>\@KEYFILE)

my $host = "hostname";
my $user = "user";

#-- set up a new connection
my $ssh = Net::SSH::Perl->new($host, debug=>1, identity_files=>\@KEYFILE)
#-- authenticate
$ssh->login($user);
#-- execute the command
my($stdout, $stderr, $exit) = $ssh->cmd("ls -l /home/user/");

这可行,但唯一的问题是,我需要跳过堡垒服务器来运行命令。我将我的私钥转发到堡垒,但我坚持的一点是如何在 perl 中使用转发的密钥,而不是使用必须在服务器上的密钥。

这可能吗?

谢谢

4

2 回答 2

3

连接到堡垒服务器时,您必须启用代理转发:

my $ssh = Net::SSH::Perl->new(
    $host,
    debug          => 1,
    identity_files => \@KEYFILE,
    options        => [
        'ForwardAgent yes',
    ],
);

有关其他 ssh Perl 模块及其优缺点,请参阅Net::OpenSSH 与 Net::SSH:: modules

于 2013-04-16T16:37:00.903 回答
2

您可以将文件内容作为标量引用传入。

my $ssh = Net::SSH::Perl->new($host, identity_files => [ \$file_contents ]);

但是,如果您要通过堡垒服务器进行 ssh,那么转发 SSH 代理是执行此操作的最佳方式(如 abraxxa 上面所示)。

于 2013-08-13T19:59:38.497 回答