Я пытаюсь скомпилировать некоторые исходники с помощью makefile. В makefile есть куча команд, которые должны выполняться как sudo
.
Когда я компилирую исходники из терминала, все идет нормально, но при первом запуске команды sudo
make приостанавливается, ожидая пароль. Как только я ввожу пароль, make возобновляется и завершается.
Но я хотел бы иметь возможность компилировать исходники в NetBeans. Итак, я начал проект и указал netbeans, где найти исходники, но когда я компилирую проект, он выдает ошибку:
sudo: no tty present and no askpass program specified
В первый раз он выполняет команду sudo
.
Я искал проблему в интернете, и все решения, которые я нашел, указывают на одно: отключение пароля для этого пользователя. Поскольку пользователь, о котором здесь идет речь, - root. Я не хочу этого делать.
Есть ли какое-нибудь другое решение?
Разрешение пользователю использовать эту команду без запроса пароля должно решить проблему. Сначала откройте консоль shell и введите:
sudo visudo
Затем отредактируйте этот файл и добавьте в самый конец:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
например
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
позволит пользователю john
использовать sudo poweroff
, start
и stop
без запроса пароля.
Посмотрите внизу экрана, какие клавиши нужно использовать в visudo - это, кстати, не vi - и выходите без сохранения при первых признаках какой-либо проблемы. Предупреждение: повреждение этого файла приведет к серьезным последствиям, редактируйте с осторожностью!
Попробуйте:
Дженкинс все=(все) NOPASSWD: все
Что работал для меня (в Ubuntu 14.04).
Попробуйте:
ssh -t remotehost "sudo <cmd>"
Это устранит вышеуказанные ошибки.
После того, как все альтернативы, я нашел:
sudo -S <cmd>
В -С (стандартный ввод) заставляет sudo для читать пароль из стандартного ввода вместо терминального устройства.
Команда все еще нуждается в пароль для ввода. Чтобы удалить ввод пароля вручную, в таких случаях, как Дженкинс, эта команда работает:
echo <password> | sudo -S <cmd>
По умолчанию sudo
будет считывать пароль из подключенного терминала. Ваша проблема в том, что при запуске из консоли netbeans терминал не подключен. Поэтому вам придется использовать альтернативный способ ввода пароля: это называется программой askpass.
Программа askpass - это не конкретная программа, а любая программа, которая может запрашивать пароль. Например, в моей системе прекрасно работает x11-ssh-askpass
.
Для этого вам нужно указать, какую программу использовать, либо с помощью переменной окружения SUDO_ASKPASS
, либо в файле sudo.conf
(подробнее см. man sudo
).
Вы можете заставить sudo
использовать программу askpass, используя опцию -A
. По умолчанию она будет использоваться только в том случае, если нет подключенного терминала.
Попробуйте это:
echo '' | sudo -S my_command
Для Ubuntu 16.04 пользователи
Есть файл, вам необходимо ознакомиться с:
cat /etc/sudoers.d/README
Поместить файл в режиме 0440 в /etc/пользователям использовать sudo?.д/мой_логин с следующим содержанием:
myuser ALL=(ALL) NOPASSWD: ALL
Должны исправить эту проблему.
Не забудьте:
chmod 0440 /etc/sudoers.d/myuser
Если случайно вы пришли сюда, потому что вы можете'т судо внутри Ubuntu, который поставляется с Windows10
Отредактировать /etc/hosts-файл в Windows (с помощью блокнота), он'll быть расположен в: папке %LocalAppData\lxss\файловой системы\и т. д.
, добавить `127.0.0.1 Windows 8 необходимо, это позволит избавиться от первой ошибки, что это может'т найти хозяина.
Чтобы избавиться от ошибки нет телетайп настоящему
, всегда судо -С в <команда>
Войдите в свой Линукс. Пожарной команды. Будьте осторожны, так как sudoer редактирования рискованно.
$ sudo visudo
Как только редактор VI открывает внести следующие изменения:
по умолчанию requiretty
Дженкинс все=(все) NOPASSWD: все
В Jenkins:
echo '<your-password>' | sudo -S command
Например:-
echo '******' | sudo -S service nginx restart
Вы можете использовать Маска плагин пароль, чтобы скрыть свой пароль
Этот работал для меня:
echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
где у вашего пользователя есть "мой_логин и"
для образов Docker, это было бы просто:
RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Убедитесь, что команду, которую вы'ре судо передоза-это часть пути ваш
.
Если у вас есть один (или несколько, но не все) команда пользователям использовать sudo?
запись, вы'будете получать на судо: нет телетайп и не askpass программы, указанной
если команда не является частью вашего пути (полный путь не указан).
Вы можете исправить это путем добавления команды в свой путь
или вызывая его абсолютный путь, т. е.
суда /usr на/sbin/ipset
Вместо
судо ipset
Команда судо
терпит неудачу, как это пытаются подсказка на пароль root и нет псевдо-телетайп выделены (как это's частью сценария).
Вам нужно либо войти в систему как root, чтобы выполнять эту команду или настройте следующие правила в файл/etc/пользователям использовать sudo?
(или:
команду sudo visudo`):
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
Затем убедитесь, что пользователь принадлежит к администраторам группы (или "колесо").
В идеале (безопаснее) было бы ограничить привилегии root только на определенные команды, которые могут быть определены как `%админ все=(все) NOPASSWD:/путь/к/программе
Я думаю, что я могу помочь кому-то в моем случае.
Во-первых, я изменил настройки пользователя в в/etc/пользователям использовать sudo?
со ссылкой на ответ выше. Но все равно это'т работу.
myuser ALL=(ALL) NOPASSWD: ALL
%mygroup ALL=(ALL:ALL) ALL
В моем случае, мой_логин
был в команды mygroup
.
И я вовсе'т необходимость групп. Так, удалил эту строку.
(Должен'т стереть строку, как я, просто пометив комментарий.)
myuser ALL=(ALL) NOPASSWD: ALL
Это работает!
Запуск shell-скриптов, которые содержат команды sudo в них от Дженкинс может не работать, как ожидалось. Чтобы исправить это, следуйте вместе
Простых шагов:
В системах на базе Ubuntu выполните " и $ команду sudo visudo и"
это позволит открыть файл /etc/файлами sudoers.
Если пользователь Дженкинс уже в этот файл, затем изменить, чтобы выглядеть так:
Дженкинс все=(все) NOPASSWD: все
сохраните файл
Возобновить свою работу Дженкинс
вы должны снова увидеть это сообщение об ошибке :)
Я получаю эту ошибку, потому что я ограничил мой пользователь только один исполняемый 'systemctl' и неправильно настроенный файл visudo.
Здесь's то, что я имел:
jenkins ALL=NOPASSWD: systemctl
Тем не менее, вы должны включать полный путь к исполняемому файлу, даже если он находится на своем пути по умолчанию, например:
jenkins ALL=NOPASSWD: /bin/systemctl
Это позволяет мое Дженкинс пользователя для перезапуска служб, но не иметь корневой доступ
Для справки, на случай, если кто-то еще столкнуться с той же проблемой, я застрял в добрый час с этой ошибкой, которая не должна произойти, так как я использовал параметр NOPASSWD.
То, что я не знала, что sudo может поднять точно такую же сообщение об ошибке, когда нет терминала и команды пользователя, пытаюсь запустить это не часть разрешенного команду в файл /etc/пользователям использовать sudo?.
Вот упрощенный пример мое содержание файл с моего вопроса:
bguser ALL = NOPASSWD: \
command_a arg_a, \
command_b arg_b \
command_c arg_c
Когда bguser будет пытаться запустить "в судо arg_b на" command_b; без любого телетайпа (bguser используется для некоторых демон), то он будет возникать ошибка "нет телетайп присутствует и программа не askpass указано, что".
Почему?
Потому что запятая отсутствует в конце строки в /etc/файлами sudoers...
(Мне даже интересно, если это ожидаемое поведение, а не ошибка суда, поскольку правильное сообщение об ошибке в таком случае должна быть "К сожалению, bguser пользователю не разрешено выполнять и т. д.&я;)
Эта ошибка может также возникнуть, когда вы пытаетесь выполнить команду терминала (требуются root-пароль) от некоторых не скрипт, например судо ЛС
(в одиночных кавычках) из программы на языке Ruby. В этом случае, вы можете использовать жду утилита (http://en.wikipedia.org/wiki/Expect) или его альтернатив.
Например, в Ruby, чтобы выполнить команду sudo ЛСбез
суда: нет телетайп настоящего, ни программы askpass указано`, Вы можете выполнить следующее:
require 'ruby_expect'
exp = RubyExpect::Expect.spawn('sudo ls', :debug => true)
exp.procedure do
each do
expect "[sudo] password for _your_username_:" do
send _your_password_
end
end
end
[при этом используется один из вариантов жду расширение ИКЛ: ruby_expect камень].
Другие варианты, не основан на NOPASSWD:
Никто не сказал, что могло вызвать эту ошибку, в случае перехода от одного хозяина к другому, помнить о проверке узла в файлами sudoers:
Так это мой файл /etc/config файл пользователям использовать sudo?
User_Alias POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL
если это не'Матч Т
uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux
он появится эта ошибка:
нет телетайп и не askpass программы, указанной