如何通过Perl脚本传递密码



我有一个情况,在我调用下面的Perl脚本

if (param("lremail") && param("lot")) {
my $address=param("lremailaddress");
my $lot=param("lot");
print a({-href=>"$dir/new.pl"},"Back to Top"),br;
print "Request submitted for $address.",br;
print "Lot $lot",br;
print "You will receive an e-mail with a link to the data when the request is complete.";
print end_html;
system ("ssh SERVERNAME /test/abc.csh $lot $$ $address &");
exit(1);

上面的脚本没有运行,因为当我执行时,系统提示输入密码。然后我查了一下,发现了下面的命令…

expect -c 'spawn ssh SERVERNAME /test/abc.csh J213520 06 abc@gmail.com "ls -lh file"; expect "Password:"; send "PASSWORDr"; interact'

上面的命令执行成功,没有任何问题,只是从命令行执行。当我把相同的(通过替换系统调用)在Perl脚本,它失败了。我如何在第一个脚本中合并?

重复和添加注释:

  • 考虑使用无口令密钥或ssh-agent(例如,使用ssh-keygen生成/管理的身份)的基于密钥的身份验证;
  • 考虑使用sshpass或其他类似expect的外部;
  • 考虑使用PerlExpect或等效的CPAN模块;和/或,
  • 考虑使用PerlNet::SSH或等效的CPAN模块。

此外,system很容易引入远程代码执行漏洞,特别是在使用其system LIST语法时。

最新更新