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

免责声明:我是新手在系统pipe理员的东西。

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

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

没有权限

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

这背后的原因是什么? 可能的解决scheme不涉及sudo su或手动编辑?

您不能使用sudo来影响输出redirect; >>> (并且为了完整性, < )是由调用用户的特权实现的,因为redirect是由调用shell完成的,而不是被调用的subprocess。

要么做

 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" 

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

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

sudo仅以root身份运行您的命令,而不是redirect。 你需要把所有东西都包装在一个命令中,这个命令以root身份运行:

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

命令sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf被解释为 (非根)将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' 

以root身份运行echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf