Назад | Перейти на главную страницу

`sudo echo« bla »>> / etc / sysctl.conf в разрешении отказано

Отказ от ответственности: я новичок в вопросах системного администратора.

Я пытаюсь настроить переадресацию портов в экземпляре AWS EC2, это нужно сделать в командной строке, потому что я не хочу входить и ничего редактировать, это должно быть автоматическим (это часть процесса сборки ).

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

Доступ запрещен

Странно то, что я (успешно) использовал sudo практически для каждой команды, которая требует su привилегии. Если я сделаю sudo su перед командой (пробуя вручную в ssh сеанс), тогда он работает.

Причины этого? Возможные решения, не предполагающие sudo su или правки вручную?

Вы не можете использовать 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"

Возможно, вам будет проще использовать эту команду:

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

sudo запускает только вашу команду, а не перенаправление, как root. Вам нужно будет обернуть все это командой, в которой все это работает от имени пользователя root:

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

Команда 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.conf как корень.

sudo sed -i "$ a <text>" <file>
  • -i : редактировать файл на месте.
  • $ a: добавить текст в последнюю строку

С помощью sed команда избавит вас от хлопот с перенаправлениями и конвейерами.

В твоем случае: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf