[英]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.