Net :: OpenSSH

时间:2018-06-28 14:35:22

标签: perl ssh openssh

我是perl的初学者,试图编写一个使用Net :: OpenSSH在给定主机上运行命令的脚本。我该如何在Net :: OpenSSH中进行交互模式身份验证,类似于在Net:SSH :: Perl中所具有的功能。 Net:SSH :: Perl有一个交互式标志,如果设置为true,则将使用密码,否则将使用公共密钥auth。以下是我在Net :: SSH :: Perl中拥有的ssh对象,我想在Net :: OpenSSH中复制它:

 $ssh = Net::SSH::Perl->new($host,
                      debug          => $debug,
                      port           => $port,
                      interactive    => $imode,
                      identity_files => [ @keys ],
                      );

此外,Net :: SSH :: Perl可以接受一系列密钥,而Net :: OpenSSH只能使用一个密钥。我该如何解决?

1 个答案:

答案 0 :(得分:1)

Net::OpenSSH在默认情况下已经以交互方式运行,当所有其他身份验证方法都失败时,必须让底层的ssh进程要求输入密码(您必须请求batch_mode才能将其禁用)

您可以通过master_opts构造函数参数传递几个键:

my $ssh = Net::OpenSSH->new($host, ...
                            master_opts => [map { -i => $_ } @keys]);

您还可以在GitHub bug-tracker中创建功能请求,最终我将增加对不使用master_opts hack的多个键的支持。