Как избежать запроса пароля sudo?

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

Ну, единственное, что я могу придумать, это

echo 'password' | sudo -S command

То -S флаг делает sudo считайте пароль из стандартного ввода. Как объяснено в man sudo:

-S, --stdin

Запишите запрос на стандартную ошибку и считайте пароль со стандартного ввода вместо использования терминального устройства. За паролем должен следовать символ новой строки.

Итак, чтобы запустить ls с sudo привилегии, вы бы сделали

echo 'password' | sudo -S ls

Обратите внимание, что это приведет к ошибке, если ваш sudo токен доступа активен, если вам не нужно вводить свой пароль, потому что вы уже сделали это недавно. Чтобы обойти это, вы могли бы использовать -k чтобы сбросить токен доступа:

echo 'password' | sudo -kS ls

Я не знаю никакого способа ввести вас в настоящую корневую оболочку (например su или sudo -i) делать. Однако этого может быть достаточно для того, что вам нужно.

В терминале запустите visudo команда для редактирования судоеры файл:

sudo visudo

и добавьте следующую строку в список пользователей sudoers

username ALL = NOPASSWD : ALL

Примечание: Заменить имя пользователя с твоим настоящим имя пользователя в приведенной выше строке.

То echo 'password' | sudo -kS ls решение работает, но у него есть несколько недостатков в области безопасности, большинство из которых уже упоминались в комментариях к ответу тердона. Таким образом, я хотел бы предложить другой подход:

Если вам часто требуется выполнить только одну команду, например apt-get upgrade, вы можете настроить свою систему таким образом, чтобы sudo someCommand делает нет требуется ввести пароль.

Чтобы сделать это, запустите visudo и введите что-то похожее на следующее:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

Обратите внимание, что если вы введете команду без аргумент (например, без upgrade в этом примере), пользователю будет разрешено запускать его с какой-нибудь аргумент, так что используйте его с осторожностью.

Вы тоже можете это сделать:

sudo -S <<< "password" command

Вместо того, чтобы полностью удалять пароль, вы можете увеличить время ожидания, чтобы вам приходилось вводить его всего несколько раз в день; в терминале запустите:

sudo visudo

В конце файла добавьте следующую строку, чтобы установить тайм-аут в 30 минут (заменить jsmith с вашим именем пользователя).

Defaults:jsmith timestamp_timeout=30

Вы можете использовать любой номер, который захотите; -1 означает отсутствие тайм-аута (запрашивается только в первый раз), и 0 означает мгновенный тайм-аут (запрашивается каждый раз, когда вы sudo). Тайм-аут по умолчанию составляет 5 минут.

Вейдер, судя по вашему комментарию к вашему первоначальному вопросу, вы хотели бы переключиться на интерактивную оболочку, работающую с правами суперпользователя, верно?

У Sudo есть определенный аргумент для запроса оболочки:

-s [command]The -s (shell) option runs the shell specified by the SHELL environment variable ifit is set or the shell as specified in the password database. If a command isspecified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

Это позволяет избежать уже упомянутых недостатков безопасности и позволяет "перейти к root" с помощью следующей команды:

sudo -s

если Мне действительно нужно запустить корневую оболочку (в большинстве случаев я этого не делаю), тогда я нахожу очень полезным установить соответствующую переменную среды HOME оболочки (чтобы отразить запуск от имени "root"), это можно сделать с помощью флага "-H". Таким образом, полная команда будет

sudo -s -H

Вы можете найти гораздо больше подробностей в справочная страница sudo.

Это, по-видимому, представляет собой огромный риск для безопасности. Я, конечно, не мог рекомендовать такой образ действий.

Это может быть решением Как мне запускать определенные команды sudo без пароля?

Не могли бы вы привести пример того, что вы имеете в виду? Вы не просто ищете “команду sudo”, не так ли?

@terdon нет, это не так. Я хотел бы иметь возможность стать суперпользователем в одной команде без необходимости выполнять “su” → ввести пароль. Это не похоже на то, что это допустимая команда: su -password