我是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只能使用一个密钥。我该如何解决?
答案 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的多个键的支持。