Как войти в систему как root из Bash и делать что-то

Это мой простой баш:

cat test.sh #!/bin/bash echo "hello" su - root -c /path/to/script.sh <<EOF password EOF whoami echo "good bye" 

Но я получаю эту ошибку:

 ./test.sh hello su: must be run from a terminal <current-user> good bye 

(ИЛИ)

 cat test2.sh #!/bin/bash echo "hello" sudo su <<EOF password EOF whoami echo "good bye" 

Опять другая ошибка

(ИЛИ)

 cat test3.sh #!/bin/bash echo "hello" su root <<EOF password EOF whoami echo "good bye" 

снова ошибка …

когда я пытаюсь:

 #!/bin/bash echo "hello" sudo -s <<EOF <password> echo Now I am root id echo "yes!" EOF whoami echo "good bye" 

Затем вывод:

 ./script.sh hello [sudo] password for <user>: 

Я также изменил свой сценарий на:

 #!/usr/bin/expect -f spawn sudo -s <<EOF expect "assword for user:" send -- "password\r" expect eof 

и выход:

 spawn sudo -s <<EOF [sudo] password for user: /bin/bash: <<EOF: command not found 

Также, which sh выход which sh /bin/sh

Как я могу разрешить ошибку в этих трех сценариях?

4 Solutions collect form web for “Как войти в систему как root из Bash и делать что-то”

Вы можете передать пароль и отправить его в команде внутри скрипта.

 echo "password" | sudo -S 

Но не стоит посылать пароль в командной строке. Если вам нужна дополнительная информация о том, как входить в систему как root из сценария, вы можете посмотреть ответ, указанный здесь .

Однако, если это для экспериментальных целей, мы можем использовать ожидание ввода пароля из командной строки. Сценарий необходимо изменить, как показано ниже.

 #!/usr/bin/expect -f spawn sudo -s <<EOF expect "assword for username:" send -- "user-password\r" expect eof 

Последняя строка необходима, так как нам нужно нажать Enter после ввода пароля. Как предположил Тиан, не рекомендуется отправлять пароль root в сценарий оболочки.

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

Использование sudo – лучший способ, который является более гибким, вы можете настроить его, чтобы разрешить только определенным командам или даже определенным пользователям запускать программу / скрипт с использованием пароля или без него ( man sudo ).

@ Ссылка Кетана тоже стоит прочитать.

Я ОТВЕТА ОТ ОТ.

Выполнение такого рода вещей небезопасно или стандартная практика (на самом деле многие считают это катастрофическим), на самом деле не стоит вводить пароль в скрипт. Более стандартным подходом было бы просто ожидать, что весь скрипт будет выполнен с привилегиями root или просто для запроса пароля для пароля. Вы также можете разрешить выполнение различных команд через sudo без пароля отдельными пользователями, используя опцию NOPASSWD в /etc/suoders .

Однако теперь, когда вы знаете о рисках, можно использовать sudo -kS чтобы sudo считывал пароль из stdin :

 sudo -kSs << EOF password whoami echo "Not a good idea to have a password encoded in plain text" EOF 

Вы пробовали / etc / sudoers?

 your_user ALL=(ALL) NOPASSWD: /path/to/script.sh 

(отредактируйте с помощью: sudoedit / etc / sudoers), тогда вы сможете запустить:

 sudo /path/to/script without password 
  • chmod и chown не работают в sudo, называемом скриптом
  • Теперь visudo не будет работать вообще
  • Разрешение отклонено: запись правила udev в тестовый файл в /etc/udev/rules.d/
  • Откройте новый bash с полномочиями sudo без повторного ввода пароля
  • root для новых chromeos lenovo n21 для python dev
  • `sudo -u user script` даже не имеет доступа к / bin / sleep
  • как передать переменную среды в sudo su
  • Ошибка аутентификации: su медленнее, чем sudo
  • Выключение или перезагрузка как обычно
  • Использование SUDO для выполнения общей команды внутри не доступного каталога
  • Как защитить скрипт sudo
  • Первое судо всегда медленно
  • Linux и Unix - лучшая ОС в мире.