net:ssh2でさまざまなコマンドを実行しようとしていますが、コマンドはrootで実行する必要があります。私はSSH経由でrootログインを無効にしています。私は鍵を設定しているので、sudo su - rootを使ってパスワードなしでrootアクセスを得ることができます。問題は複数のコマンドを実行する必要があるため、接続できるかどうか、sudoをrootにしてから、sudoにパイプをかけることなく、必要なコマンドをすべて実行することです。NET :: SSH2 with sudo
私のコードの関連セクションは次の通りです。可能であれば、exec($ commands [0])の前には sudoが好きです。
EDIT:ポリシー違反のため、パスワードの有無にかかわらずrootに直接ログインすることはできません。私はまず自分のユーザーとつながなければならない。代わりにちょうどsudo
で各コマンドを続行sudo su -
を使用しての
my $ssh2 = Net::SSH2->new();
$ssh2->connect($server) or die "$!\n";
if ($ssh2->auth_publickey($user,"/home/$user/.ssh/id_rsa.pub", "/home/$user/.ssh/id_rsa"))
{
my $chan = $ssh2->channel();
$chan->blocking(1);
$chan->exec($commands[0]);
my @users;
while(<$chan>) {push(@users,$_);}
my $stdout=join("",@users);
print $stdout;
}
ありがとう!これは完全に動作するはずです。 'sudo su - 'しか使用できないのは、sudoersファイルで制限されているからです。私はすべてのルールを設定していないので、なぜそれが完了したのかは言えません。sudoersファイルは以下のようになります。%ourgroup ALL =(ALL)NOPASSWD:/ bin/su - root – zoite