crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как выполнить команду через sudo, Не могу заставить sudo работать
AndreyR
  опции профиля:
сообщение 18.2.2011, 19:46
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 29.1.2011
Пользователь №: 2376

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте. Возникла необходимость выполнить в программе на Linux команду fdisk, которая требует админских привилегий. Попытался выполнять ее через sudo, но проблема в том, что вызывая, например, sudo fdisk -l /dev/sda через QProcess, не получается передать sudo пароль. Пытался загружать его вот так:

commandProc.start("sudo", params);
commandProc.waitForStarted(30000);
commandProc.write(password);
commandProc.closeWriteChannel();
commandProc.waitForFinished(4000);

но получается "unknown error". Подскажите пожалуйста, можно ли выполнить sudo как-нибудь по другому? Есть вариант использовать команды gksudo, kdesudo, но как-то это мудрено, опять таки зависимость от оконной среды, не хочется прибегать к таким мутным вариантам.

О :blink: Не в тот раздел попал, перенесите пожалуйста
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.2.2011, 20:04
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(AndreyR @ 18.2.2011, 21:46) *
не получается передать sudo пароль
лучше, ждать отклика приложения (sudo), т.е. ловить то что оно печатает. Наверняка оно печатает, что-то типа:
"enter password:"
и только потом ожидает пароля
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 19.2.2011, 9:56
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


AndreyR,
в ман по sudo загляни - там есть ключик -S
так вот с ним sudo считывает пароль со стандартного ввода
тебе надо сделать примерно так
echo "твой пароль" | sudo -S fdisk -l /dev/sda
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AndreyR
  опции профиля:
сообщение 20.2.2011, 20:38
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 29.1.2011
Пользователь №: 2376

Спасибо сказали: 0 раз(а)




Репутация:   0  


kwisp, спасибо. Сработало.
Может кому-то пригодится, я делал вот так:

commandProc.start("/bin/bash");
commandProc.waitForStarted(3000);

//123456 - пароль. \n - имитирует нажатие Enter.
commandProc.write("echo 123456 | sudo -S fdisk -l /dev/sda\n");
commandProc.waitForFinished(4000);

QByteArray ta = commandProc.readAll();


Получается только если запустить bash. Вызов sudo напрямую через QProcess не дает результата никак.
Причина редактирования: теги!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 21.2.2011, 9:55
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(AndreyR @ 20.2.2011, 20:38) *
Получается только если запустить bash. Вызов sudo напрямую через QProcess не дает результата никак.

а если файл скрипта создать? можно даже из программы.
#!/bin/bash
echo 123456 | sudo -S fdisk -l /dev/sda 2>&1 ./fdisk.output

и его выполнить напрямую через QProcess
правда права на выполнение скрипта не знаю как выставить. но на этом форуме можно поискать.

ты ман sudo читал? там есть ещё ключ запускающий sudo в фоне. может пригодиться.
вообще надо почитать как именно выполняются процессы. может запуск в фоне или какой нить другой ключ предотвратят лишние действия такие как запуск ещё одной оболочки и проч....

П.С.
используй теги - это очень облегчает чтение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.2.2011, 11:05
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9666
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


можно поискать исходник ksudo (вроде так называется) - оболочка KDE-шная для sudo
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 21.2.2011, 11:50
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 21.2.2011, 11:05) *
можно поискать исходник ksudo (вроде так называется) - оболочка KDE-шная для sudo

или запускать sudo с ключом указывая путь к программе которая спрашивает пароль. askpass у меня она к емаксу прикручена чтоб с cvs по ssh работать
вариантов куча.
Домашняя страница kde-misc/kdesudo
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 21.2.2011, 13:01
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


А можно настроить sudo что бы он пароль не спрашивал...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 21.2.2011, 13:10
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Kagami @ 21.2.2011, 13:01) *
А можно настроить sudo что бы он пароль не спрашивал...

а как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Disaron
  опции профиля:
сообщение 23.2.2011, 22:04
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.2.2011
Пользователь №: 2420

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 21.2.2011, 13:10) *
Цитата(Kagami @ 21.2.2011, 13:01) *
А можно настроить sudo что бы он пароль не спрашивал...

а как?

Это конечно ужас и неправильно, но можно:
в /etc/sudoers
<имя_пользователя>    ALL=NOPASSWD: ALL

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.1.2021, 19:00