0

salvas の Net::Openssh モジュールを使用していますが、sudo の使用方法がわかりません。以下を試してみましたが、うまくいきません...

結果には何も出力されません。ls、などの単一単語コマンドpwdも何も生成しません。

ターゲット システムの sudo のバージョン:

$ /usr/local/bin/sudo -V
CU Sudo version 1.5.7p2

$ /usr/local/bin/sudo -h
CU Sudo version 1.5.7p2
usage: /usr/local/bin/sudo -V | -h | -l | -v | -k | -H | [-b] [-p prompt] [-u username/#uid] -s | <command>

CU sudo は一度に複数のオプションを許可しないため、コマンドを提供する前に -k を提供します。

この sudo バージョンには、stdin を使用してパスワードを渡すための -S スイッチがないことに注意してください。そのため、端末からのパスワードが必要です。もっと助けてくれませんか。どうも。

$ssh->system("$sudo_path -k");
my @output = $ssh->capture({tty => 1,
              stdin_data => "$PASS"},
              $sudo_path,
              "-p",'', "$cmd");
print "  result=@output \n";

また

$ssh->system("$sudo_path -k");
my @output = $ssh->capture({stdin_data => "$PASS"},
              $sudo_path,
              "-p",'', "$cmd");
print "  result=@output \n";
4

1 に答える 1

0

質問で達成しようとしていることを詳しく説明していただけると助かりますが、perl の Net::OpenSSH モジュールを使用して ssh 経由で sudo を必要とするコマンドを実行しようとしていると想定しています。

その場合は、「ヒアドキュメント」を使用して一連のコマンドをスクリプト化することを検討してください。

これは Quote-Like 演算子のPerlDoc です。このようなスクリプトを作成するためにここのドキュメント<<EOFをよく使用しているので、話題になっている領域を探してください。

何らかの理由で Net::OpenSSH コマンド内でヒアドキュメントを使用しても機能しない場合、Net::OpenSSH はここに記載されているように Expect でも機能します。

何らかの理由でそれがうまくいかない場合は、リモート システムのヒアドキュメントを介して sudo でコマンドを実行するシェル スクリプトをいつでも作成し、そのスクリプトを Net::OpenSSH 接続を介して実行することができます。

于 2012-09-30T03:37:17.977 に答える