在Linux中,如何将用户更改为perl中的root并继续运行此脚本?如何在perl中导出代理?

问题描述:

我的perl脚本应该能够在执行期间将普通帐户更改为root帐户,然后继续执行其余命令。但我不知道该怎么办:在Linux中,如何将用户更改为perl中的root并继续运行此脚本?如何在perl中导出代理?

  1. 更改为root帐户,并能够自动通过身份验证,我使用下面的代码,但失败了。

    system "echo \"$password\" | sudo -S su root"; 
    
  2. 能够继续完成剩下的scriptsI使用脚本时更改帐户中(只是一味系统“命令苏”),它是不能执行其他脚本

  3. 我需要出口代理,但是当我使用下面的代码,它不工作:

    system "export http_proxy=http://proxy.companyname.com:8080"; 
    
+0

的[运行Linux系统命令作为超级用户,使用Python脚本]可能的复制(http://stackoverflow.com/questions/583216/run-a-linux-system-command-as-a -superuser-using-a-python-script)或者[如何运行需要root权限的perl脚本?](https://stackoverflow.com/questions/16178015/how-can-i-run-a-perl- script-which-needs-root?rq = 1) – ray

+0

谢谢,但有点不同。我应该使用perl脚本将帐户更改为root并导出代理,并且不能更改配置文件/配置文件或使用“sudo命令”。 –

+0

最近版本的'sudo'可以通过传递'-S'来读取'stdin'的密码。详细信息请阅读[手册页](https://www.sudo.ws/man/1.8.18/sudo.man.html)! – salva

也许尝试反引号?

my $sudo = `echo \"$password\" | sudo -S su root`; 

也出口类似。

my $exp = `export http_proxy=http://proxy.companyname.com:8080`; 
+0

谢谢,但我认为系统的功能“”;与反引号几乎相同?我其实不想得到上述命令的输出,我只希望这两个命令可以执行。 –

如果您需要执行其他脚本以root执行,并且您已经安装了SSH的Perl模块,那么你可以打开一个SSH会话以root用户的本地主机并从那里开始执行脚本。

my $ssh = Net::SSH::Perl->new("host1"); 
$ssh->login("root", "pass1"); 
$ssh->cmd("sh /opt/..."); 
+0

感谢您的回复,但我无法安装Net :: SSH :: Perl。 –