簡體   English   中英

NET :: SSH2與sudo

[英]NET::SSH2 with sudo

我正在嘗試使用net:ssh2運行各種命令,但是這些命令需要以root用戶身份運行。 我通過SSH禁用了root登錄,並且設置了密鑰,因此我可以ssh並使用'sudo su-root'來獲得沒有密碼的root訪問權限。 問題是我需要運行多個命令,所以我想知道是否可以連接,然后將sudo連接到root,然后運行我需要的所有命令,而不必將回顯傳遞給sudo或使用Expect。

我正在處理的代碼的相關部分如下,我希望盡可能在exec($ commands [0])之前sudo。

編輯:我無法使用或不使用密碼直接登錄到root用戶,這很遺憾違反了政策。 我必須先與用戶聯系。

    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;
    }

我沒有嘗試過,但是su具有-c參數,該參數將單個命令傳遞給Shell以執行,然后完成Shell。 這很可能對應於您的shell的-c參數,實際上它在這里很高興地接受復合命令,例如,用;分隔的命令列表;

這樣執行

sudo su -c 'command1 ; command2 ; command3 ' - root

可以在這里工作。 (或什至只有這些命令之一,然后重復調用它們。)

(但我認為,如果設置允許無密碼的sudo su - root ,但不允許執行普通的sudo命令,則設置可能有問題。)

而不是使用sudo su -剛剛入手的每個命令sudo 如果允許您在沒有密碼的情況下進行sudo,則應該可以正常工作:

$chan->exec("sudo $commands[0]");

如果您的命令需要root的路徑,只需指定它的完整路徑即可。 (由於您未顯示命令的內容,所以無法判斷。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM