Как создать исполняемый скрипт bash для этих команд?

Я хочу создать исполняемый скрипт bash, который будет запускать следующие команды как root, то есть, используя sudo su

iptables-save | awk '/^[*]/ { print $1 } /^:[AZ]+ [^-]/ { print $1 " ACCEPT" ; } /COMMIT/ { print $0; }' | iptables-restore 

Моя первая попытка создания сценариев bash заключается в следующем:

 #!/bin/bash sudo su iptables-save | awk '/^[*]/ { print $1 } /^:[AZ]+ [^-]/ { print $1 " ACCEPT" ; } /COMMIT/ { print $0; }' | iptables-restore sleep 3; exit 0 

Может ли кто-то исправить вышеизложенное и сделать его работоспособным?

One Solution collect form web for “Как создать исполняемый скрипт bash для этих команд?”

Сценарии оболочки не совсем то же самое, что печатать на терминале.
Что произойдет, так это то, что iptables-save будет ждать завершения sudo su , а затем запустится. Вы хотите запустить iptables-save внутри sudo .

Во-вторых, sudo su относится к числу примеров «бесполезного использования». Соответствующий эквивалент
sudo -i .

Есть два подхода, которые вы можете предпринять для решения этого.

Способ 1

 sudo -i <<'EOF' iptables-save | awk '/^[*]/ { print $1 } /^:[AZ]+ [^-]/ { print $1 " ACCEPT" ; } /COMMIT/ { print $0; }' | iptables-restore EOF 

Это в основном запускает корневую оболочку и отправляет эту команду через оболочку.
Причина, по которой мы не просто добавляем sudo перед командами iptables-save и iptables-restore заключается в том, что он одновременно запускает 2 sudo s. Это не работает, если они оба пытаются запросить пароль.
Таким образом, это решение работает вокруг проблемы, только запустив один sudo .

Одна линия
В соответствии с запросом в вашем комментарии вы можете сделать это в одной строке, но читать его становится гораздо труднее.

 sudo -i sh -c 'iptables-save | awk '\''/^[*]/ { print $1 }; /^:[AZ]+ [^-]/ { print $1 " ACCEPT" ; }; /COMMIT/ { print $0; }'\'' | iptables-restore' 

Способ 2

 sudo -v sudo -n iptables-save | awk '/^[*]/ { print $1 } /^:[AZ]+ [^-]/ { print $1 " ACCEPT" ; } /COMMIT/ { print $0; }' | sudo -n iptables-restore 

Это решение выполняется sudo в первый раз, без какой-либо команды, просто -v . Это приводит к тому, что sudo запрашивает пароль, если ваш сеанс истек. Тогда любые команды, запускаемые в этом окне срока действия сеанса, не требуют пароля. Таким образом, запуск 2 sudo s в то же время уже не является проблемой, так как ни один из них не будет запрашивать (мы добавляем -n чтобы быть абсолютно уверены в этом. Он будет вызывать ошибку, если попытается).

  • ubuntu + добавить root для новой учетной записи пользователя
  • Установка курсора с помощью мыши с помощью шпатлевки не работает, если sudo
  • Система Crontab или Root Crontab
  • Не удалось установить пакет. Есть ли способ автоматической установки зависимостей?
  • Запретить `apt-get`,` yum` устанавливать бинарные файлы setuid, когда они запускаются через sudo
  • Как предотвратить использование оболочки звонящего в sudo
  • Невозможно зайти в каталог в Debian 9
  • сбросить разрешения системного файла, владельцев и групп
  • Отключить запрос на аутентификацию при автозаполнении команды, которая требует привилегий root
  • Как установить mintinstall для запроса пароля суперпользователя из учетной записи non sudoer?
  • Откуда получила название «колесо»?
  • Interesting Posts

    Есть ли способ заставить libusb вести себя в режиме реального времени?

    Видеовстреча на Fedora25 и Black Screen во время экрана

    Загрузка с оболочки на HTTP-сервер

    как заставить службу сети использовать обновленный файл интерфейса при запуске системы

    Чтение потоковых данных с сервера

    Обнаруживать изменения в разрешениях

    AWK: вложенное условное подмножество строк

    Запуск Docker в среде Windows / cygwin

    Хотя в vi как я могу вставить / вставить / вставить содержимое другого файла

    Здесь-документ без интерпретации escape-последовательностей, но с интерполяцией

    Разрешить определенному пользователю sudo пользователям, входящим в группу X

    Поддерживает ли Gnome Keyring ключи OpenSSH нового формата?

    Как скомпилировать драйвер дерева вне дерева для Fedora для исправления сверх медленных Wi-Fi?

    полужирный текст при использовании 256 цветов

    Как я могу получить доступ к samba из окон 8?

    Linux и Unix - лучшая ОС в мире.