我想用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