【问题标题】:Perl ssh PasswordPerl ssh 密码
【发布时间】:2015-06-05 17:50:46
【问题描述】:

我正在尝试使用 perl 通过 SSH 连接到一台机器并发出一些命令...

my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user,$pass);
my($stdout, $sterr, $exit) = $ssh->cmd($cmd);
print "$stdout \n"

这是一般的想法,但我仍然卡在密码提示符下。我也尝试过使用python,也无法通过密码提示。另一方面,Expect 可以很好地处理密码。有谁知道这是什么原因造成的?

编辑:附加信息

我在一台 linux 机器上使用 putty,然后通过 ssh 连接到更多的 linux 机器上。使用上面的 perl 代码,用户名设置正确,但我最终不得不每次手动输入密码。

【问题讨论】:

  • 我实际上已经想出了解决密码问题的解决方案,方法是在 perl 中使用“使用期望”并让该解决方案为我处理。另外,出于安全原因,我知道这是低于标准的,但这不是自愿的。
  • 你听说过pexpect吗?
  • 如果可能,您应该设置 SSH 密钥而不是使用密码。
  • @Tom 我认为你应该使用 SSH 密钥。他们不会要求任何东西,你也不会拘泥于任何东西。
  • 我会研究一下这些键,但对于这个项目来说,它们并不是一个真正的选择。为什么我不使用某种形式的 except 就无法通过密码部分,这确实是我一直坚持的问题。

标签: python perl ssh expect.pm


【解决方案1】:
  use strict;
  use warnings;
  use Expect;

  $exp= Expect->spawn("ssh $host -l $user");

  sleep(1);

  $exp->expect($timeout,"Password:");
  $exp->send("$pass\r");

  $exp->expect($timeout,-re,'>');
  $exp->send("ls -l\r");

  $exp->expect($timeout,-re,'>');
  $exp->send("mkdir aDir\r");

  $exp->expect($timeout,-re,'>');
  $exp->send("chmod 777 aDir\r");

  $exp->expect($timeout,-re,'>');
  $exp->send("exit\r");

出于明显的原因省略了变量声明...不是问题的确切答案,而是仅使用“期望模块”的可行工作。

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 2011-02-23
    • 2022-11-06
    • 2017-06-14
    • 1970-01-01
    • 2019-09-26
    • 2014-01-06
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多