`sudo echo“ bla” >> / etc / sysctl.conf`权限被拒绝


16

免责声明:我是sysadmin的新手。

我正在尝试在AWS EC2实例中设置端口转发,这必须在命令行中完成,因为我不想进入并编辑任何内容,它必须是自动的(这是构建过程的一部分) )。

sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

没有权限

奇怪的是,我(成功地)使用sudo了几乎所有需要su特权的命令。如果我sudo su在命令之前执行(在ssh会话中手动尝试),那么它将起作用。

这背后的原因?不涉及sudo su或手动编辑的可能解决方案?


同样的问题在这里:stackoverflow.com/questions/82256/…-而且,如果您真的想冒险:sudo -i
MirroredFate 2013年

Answers:


46

您不能sudo用来影响输出重定向;>>>(为了完整<起见,)是通过调用用户的特权来实现的,因为重定向是由调用外壳程序而不是被调用子进程完成的。

要么做

cp /etc/sysctl.conf /tmp/
echo "net.ipv4.ip_forward = 1" >> /tmp/sysctl.conf
sudo cp /tmp/sysctl.conf /etc/

要么

sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"

15

您可能会发现使用此命令更简单:

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf

12

sudo作为根用户仅运行命令,而不运行重定向。您需要将其全部包装在一个命令中,其中整个命令都以root身份运行:

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

3

该命令sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf被解释为(非root用户)将结果sudo echo "net.ipv4.ip_forward = 1"写入/etc/sysctl.conf。

sudo -s 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

要么

sudo su -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confroot 身份运行。


1
sudo sed -i "$ a <text>" <file>
  • -i :在适当位置编辑文件。
  • $ a:将文本追加到最后一行

使用sed命令避免了重定向和管道的麻烦。

在您的情况下: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.