Как запустить sudo под su?

У меня есть это:

su $username -c ./script.sh

Проблема в том, что в сценарии у меня есть команды «sudo», и они говорят мне

sudo: no tty present and no askpass program specified

Как это сделать правильно?

UPD: мне нужны и sudo, и su. Что мне нужно сделать, так это запустить скрипт как USER $username и иметь возможность запускать определенные команды внутри скрипта как root (например, pacman -S)

РЕШЕНИЕ: я добавил параметр NOPASSWD в /etc/sudoers перед запуском скрипта и удалил эту запись с помощью sed после завершения скрипта.


person EwanCoder    schedule 03.03.2014    source источник
comment
либо исправьте скрипт, либо удалите su.   -  person rakib_    schedule 03.03.2014
comment
эти пользователи в файле sudoers?   -  person Oleg Belousov    schedule 03.03.2014
comment
Настройте свой файл sudoers, чтобы внести нужные команды в белый список без запроса пароля. (TTY необходим для безопасного запроса пароля, но если вы не запрашиваете пароль...)   -  person Charles Duffy    schedule 03.03.2014


Ответы (1)


Сначала установите chmod +x в свои скрипты

пытаться:

#!/bin/bash
echo "hello"
su - <your-user> -c /path/to/script.sh
echo "good bye"

ОБНОВЛЕНИЕ:

Вы должны найти способ заставить bash использовать pseudo-tty

Принудительное выделение псевдотерминала. Это можно использовать для выполнения произвольных экранных программ на удаленной машине, что может быть очень полезно, например. при реализации сервисов меню. Несколько опций -t принудительно выделяют tty, даже если ssh не имеет локального tty.

Если пользователь не является sudoers, выполните следующие действия:

Вот что вам нужно сделать в /etc/sudoers:

# User privilege specification
root        ALL=(ALL:ALL) ALL
newuser    ALL=(ALL:ALL) ALL

у вас также есть способы сделать: вы можете передать пароль, если у него есть пароль:

echo "yourpassword" | sudo -S

OR

Вы можете запустить следующий скрипт:

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

Также вы можете сделать это:

sudo -kS bash - << EOF
password
whoami
echo "Not a good idea to have a password encoded in plain text"
EOF
person MLSC    schedule 03.03.2014
comment
Я знаю о группах, visudo и других вещах :) и да, мой пользователь находится в sudoers. Я пробовал su - $USER -c /path/to/script.sh - это тоже не работает (та же ошибка). sudo, выполненный под su -c, просто не видит терминал или что-то еще и не может быть выполнен, а жаль. - person EwanCoder; 03.03.2014
comment
@@EwanCoder Я снова обновил... у этого пользователя есть пароль? каков был результат su - <your-user> -c /path/to/script.sh - person MLSC; 03.03.2014
comment
Я не против того, что пользователь вводит свой пароль при выполнении скрипта. Проблема не в пароле, а в самом sudo, он не работает в процессе 'su - $user -c'. - person EwanCoder; 03.03.2014
comment
пожалуйста, не используйте $. Если ваш пользователь test. попробуй: su - test -c /path/to/script.sh - person MLSC; 03.03.2014
comment
В результате была та же ошибка sudo: нет tty и не указана программа askpass. - person EwanCoder; 03.03.2014
comment
Хорошо, я пытаюсь найти ответ - person MLSC; 03.03.2014
comment
Та же ошибка без $. Но я использую $, потому что $ewancoder — это переменная, установленная ранее. Посмотрите postinstall*.sh github.com/ewancoder/dotfiles/tree/master/. установить - person EwanCoder; 03.03.2014
comment
см. эти ссылки: 1 2 3 - person MLSC; 03.03.2014
comment
Вы должны найти способ заставить bash использовать псевдотерминал. - person MLSC; 03.03.2014
comment
Он использует --session , должен решить эту проблему ЗДЕСЬ - person MLSC; 03.03.2014
comment
Каково было точное решение? - person MLSC; 03.03.2014