Отказ от ответственности: я новичок в вопросах системного администратора.
Я пытаюсь настроить переадресацию портов в экземпляре 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