首页 > 解决方案 > Net::OpenSSH 中的交互模式

问题描述

我是 perl 的初学者,并试图编写一个使用 Net::OpenSSH 在给定主机上运行命令的脚本。如何在 Net::OpenSSH 中进行交互模式身份验证,类似于我们在 Net:SSH::Perl 中的身份验证。Net:SSH::Perl 有一个交互式标志,如果设置为 true,则输入密码,否则为公钥验证。以下是我在 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 只有一个。我该如何解决这个问题?

标签: perlsshopenssh

解决方案


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

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

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

您还可以在 GitHub错误跟踪器中创建一个功能请求,我最终将添加对接受多个密钥而不使用该master_optshack 的支持。


推荐阅读