Net::OpenSSH 中的交互模式

Interactive mode in Net::OpenSSH

我是 perl 的初学者,正在尝试编写一个在给定主机上使用 Net::OpenSSH 到 运行 命令的脚本。我如何在 Net::OpenSSH 中进行交互模式验证,类似于我们在 Net:SSH::Perl 中进行的操作。 Net:SSH::Perl 有一个交互式标志,如果设置为 true 则接受密码,否则 public key 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 只能接受一个键。我该如何解决这个问题?

Net::OpenSSH already runs in interactive mode by default, letting the underlaying ssh process ask for a password when all the other authentication methods fail (you have to request batch_mode 禁用它)。

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

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

您还可以在 GitHub bug-tracker 中创建功能请求,我最终会添加对接受多个密钥的支持,而无需使用 master_opts hack。