如何自动化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 脚本连接机器

Shell – SSH自动登录

如何自动运行大量 perl 脚本?

如何写个linux shell脚本自动重启系统

如何将AWS实例的详细信息传递给jenkins作业,以便该作业在实例中ssh和执行

从 Jenkins 管道运行脚本时,如何通过 ssh 在远程 AIX 机器中加载环境变量?