如何自动化ssh登录,其中perl脚本用户需要2个密码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何自动化ssh登录,其中perl脚本用户需要2个密码相关的知识,希望对你有一定的参考价值。
我需要自动化一个测试用例,如果用户使用第一个密码(键盘交互式)成功验证用户,则会在ssh登录时提示用户输入第二个密码。
如何使用perl自动化这个测试用例?
尝试过使用perl SSH expect模块,但它只适用于第一个密码:
如果没有输入您的EMERG一次性密码行,脚本适用于单个密码。但如果我包括第二个密码即。输入您的EMERG一次性密码,编译后会出现以下错误:
test_pswrd.pl第8行的语法错误,接近“time password”全局符号“$ ssh”需要test_pswrd.pl第13行显式的包名。由于编译错误,test_pswrd.pl的执行被中止。
use Net::SSH::Expect;
use strict;
use warnings;
my $ssh = Net::SSH::Expect->new (host => "1.1.1.1",
password=> 'testpwd',
Enter your EMERG one-time password => '123456',
user => 'testuser',
raw_pty => 1);
my $login_output = $ssh->login();
print $login_output;
答案
AFAIK,没有SSH Perl模块支持直接使用多个密码进行日志记录。
Net::OpenSSH允许一个人使用自定义login handler,但你必须编写代码来读取远程提示并在合适的时间发送密码。
另一种选择是使用Expect。
一旦建立连接,哪个选项最好取决于您之后计划做什么。对于复杂的SSH交互,Net::OpenSSH
是更好的选择。另一方面,如果你只是想向远程端发送一个命令,可能写自定义login_handler
不值得麻烦,所以我的建议是在这种情况下使用Expect
。
以上是关于如何自动化ssh登录,其中perl脚本用户需要2个密码的主要内容,如果未能解决你的问题,请参考以下文章
需要通过 SSH1 和 SSH2 从 Perl 脚本连接机器