Вопрос по qt-creator, ubuntu, qmake, sudo – В Linux, как добавить шаг сборки в Qt Creator, который использует привилегии su без получения неправильного пароля при сборке?

6

Моя цель - успешно связать папку с каталогом / opt /, который необходимо запустить с помощью sudo.

Я попробовал это:

 system(sudo ln -s $$OUT_PWD/xampp /opt/lampp):message("You should manually link LAMPP")

Но сборка из qt-creator не запрашивает пароль sudo, поэтому я не смог получить его, чтобы связать папку. Я получил & quot; неверные попытки ввода пароля ... & quot; ошибка в выходных данных компилятора. Затем я попробовал это с шагами сборки:

make
sudo make install

чтобы увидеть, не подскажет ли это мне там, но не удалосьmake install шаг с той же ошибкой, что это подробно:

00:31:20: Starting: "/usr/bin/sudo" make install
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
00:31:20: The process "/usr/bin/sudo" exited with code 1.

system() функция в скрипте qmake отлично работает, когда я используюqmake && make && make install из терминала, так как он подсказывает мне раньшеsudo ln... команда; но для быстрого тестирования я чувствую, что сборка с помощью CTRL-B внутри Qt Creator также должна работать с командами sudo ...

Есть ли способ получить запрос от Qt Creator или способ обойти это? Например, сохранение прохода sudo в Qt Creator (хотя это и опасно) ... Или, может быть, заставить его запускать этапы сборки на терминале, где он мне подсказывает? Было быprompt() функция в qmake работать с сбором паролей sudo?

Любые предложения приветствуются ...

Да, я могу строить из gnome-терминала. Спасибо за предложение, я думал, что сценарий bash будет проще ... :) Logan
Вы можете построить из gnome-терминала? Я не уверен, как бы вы интегрировали шаг сборки в Qt-Creator, который требует повышенных привилегий. В любом случае, вероятно, было бы легче построить из терминала. Вы можете легко создать скрипт bash, который выполняет все этапы сборки, включая qmake, make и make install. Cameron Tinker

Ваш Ответ

4   ответа
2

@Logan Вы можете вызватьsudo использоватьssh-askpass (Диалоговое окно запроса пароля GUI) непосредственно с его-A вариант, это может использоватьSUDO_ASKPASS переменная среды для переопределения/usr/bin/ssh-askpass значение, которое может быть настроено в/etc/sudo.conf[1] (как предложенияgksudo или жеkdesudo от @herophuong). Это позволяет обойти угрозу безопасности второго решения в вашем ответе, которое оставляет"password" видны все, что может наблюдать аргументы командной строки. Эквивалентом вашего первого решения становится:

sudo -A -s .

Не забывайте, чтоsudo может обеспечить кэширование учетных данных, чтобы, если оно использовалосьvery недавно (по умолчанию 5 минут?), повторный вызов использует это кэшированное значение пароля вместо того, чтобы делать еще один запрос пароля.If, for sanity/security reasons, this is not desired for a script (or elsewhere) use sudo -K with no other arguments to immediately clear any cached credentials (no password is needed for that usage) so that any subsequent sudo usage will require authentication.

1 - Remember to use visudo as root if you wish to edit /etc/sudo.conf to add:

# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass

2

вы можете настроить Qt Creator на этап развертывания с помощью команды gnome-терминал и аргументов -e & quot; sudo make install & quot ;.

Эффективно так же, как работаетgnome-terminal -e "sudo make install"

Изображение - это скриншот того, как выглядит этот конфиг в Qt Creator :)

Qt Creator с sudo make install шаг с настройками проекта терминала gnome

gksudo больше не рекомендуется и не устанавливается по умолчанию в Ubuntu

3

ssh-askpass Sudo Password | sudo -S bash ./script

Работает как брелок, запрашивает пароль в отдельном окне / окне приглашения. Я добавил его под пользовательские шаги сборки. Главное, чтобы позволитьsudo знать, что он будет ожидать ввода пароля через-S вариант.

echo "password" | sudo -S bash ./script

Также работает со скриптами bash, однако, как вы думаете, небезопасно хранить пароль sudo внутри скрипта. Говорят, что разрешения на чтение должны решить эту проблему.

0

gksudo (в GNOME) илиkdesudo (в KDE). Затем команды будут использовать окно для запроса вашего пароля.

Похожие вопросы