我想用net:ssh2運行各種命令,但是這些命令需要以root身份運行。我通過SSH禁用了root登錄,並且我已經設置了密鑰,因此我可以使用ssh並使用'sudo su - root'來獲取root密碼。問題是我需要運行多個命令,所以我想知道是否可以連接,然後sudo root,然後運行我需要的所有命令,而無需將回顯傳遞給sudo或使用expect。NET :: SSH2與sudo
我正在使用的代碼的相關部分如下,如果可能的話,我最好喜歡在exec($ commands [0])之前使用 sudo。
編輯:我不能直接登錄到有根或沒有密碼的根,因爲它不幸地違反了政策。我必須先與我的用戶聯繫。
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