免责声明:我是新手在系统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 。