perl - 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 只有一个。我该如何解决这个问题?
解决方案
Net::OpenSSH默认已经在交互模式下运行,当所有其他身份验证方法都失败时,底层ssh
进程会要求输入密码(您必须请求batch_mode
禁用它)。
您可以通过master_opts
构造函数参数传递几个键:
my $ssh = Net::OpenSSH->new($host, ...
master_opts => [map { -i => $_ } @keys]);
您还可以在 GitHub错误跟踪器中创建一个功能请求,我最终将添加对接受多个密钥而不使用该master_opts
hack 的支持。
推荐阅读
- swift - 是否可以合并两个不同的 AVAudioPlayer 曲目
- r - 分解具有奇数起始月份的 ts
- html - 我的验证码未以 html 形式出现
- android - Kotlin 中的 map 和 mapTo 有什么区别
- wcf - https 上的 WCF 和 ASMX 禁止使用 text/xml
- python - 在 Reportlab 中 splitbyRows 做了什么?
- django - 无效的用户名/密码错误 django rest 框架自定义用户序列化程序
- ios - Swift - Firebase 如何在没有父级的情况下仅获取子级值
- email - fail2ban 配置第三方邮件服务器
- android - REACT NATIVE:找不到参数的方法实现()