3

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マシンにパテを使用してから、さらに多数のLinuxマシンにsshします。上記の perl コードを使用すると、ユーザー名は正しく設定されますが、パスワードを毎回手動で入力する必要があります。

4

1 に答える 1

0
  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");

明らかな理由で変数宣言を省略しました...質問に対する正確な答えではありませんが、「期待モジュール」のみを使用した実行可能な回避策です。

于 2015-06-05T22:43:43.340 に答える