LINUX.ORG.RU

Авто пароль и авто ответ в sudo. Скрипт Bash

 , , ,


0

2

И снова доброго времени суток. Уже обращался сегодня и помогли. А теперь новая проблема

Не получается автоматически подставить пароль в sudo и ответ yes для установки

if [[ $ChangeMenu = $InstallSSHServer ]]; then
	echo "1 $ChangeMenu"
	PASSWD=$(zenity --password --title="Authentication")
	if [[ -z $PASSWD ]]; then
		zenity 	--error \
       			--text="Введите пароль!!!"\
       			--no-wrap
	else 
		(echo "0" ; sleep 2
		echo "# Начинаю обновление пакетов" ; sleep 2	
		$PASSWD | sudo apt-get update 
		echo "25" ; sleep 2
		echo "# Обновление пакетов завершено" ; sleep 2
		echo "# Начинаю установку ssh" ; sleep 2
		echo "30" ; sleep 2
		$PASSWD yes | sudo apt-get install ssh 
		echo "80" ; sleep 2
		echo "# Установка ссн завершена" ; sleep 2
		echo "Готово" ; sleep 2
		echo "100" ; sleep 2
		) |
		zenity --progress \
       --title="Конфигурирование" \
       --text="Инициализация..." \
	   --auto-close \
	   --percentage=0
		
      fi	
fi

Выход :
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
./1test.sh: строка 38: 123: команда не найдена

123 Это введенный пароль

Похоже это как-то связано с zenity --progress Может есть другой способ установки. Но так чтоб пользователь видел хоть какую-то деятельность, а не так-что не понятно что-там происходит. Потому-что скрипт будет запускаться не из терминала, а по двойному клику

Ответ на: комментарий от Jopich1

Не совсем понял, что вы написали Попробовал так

echo $PASSWD | sudo -S apt-get update echo $PASSWD | sudo apt-get install ssh -y

Ошибка пропала, но и действие не выполнилось. А если заменить команду apt-get install, например на копирование файла, то получим

cp: невозможно создать обычный файл '/home/vlad/skr/1test.sh.cop':
Отказано в доступе

satewriter128 ()
Ответ на: комментарий от mandala


я получаю его из поля для ввода
и экспорт сразу после получения?

Пробовал так

PASSWD=$(zenity --password --title="Authentication")
export PASSWD

Работает ваш скрипт или мой? Такой простой вариант как у вас у меня тоже работает. Но у меня более сложная конструкция. Все эти операции происходят в (тут код который не работает) | zenity --progress

satewriter128 ()

А не проще прописать в /etc/sudoers для заданного пользователя и для команды apt-get опцию NOPASSWD:? Заодно и пароль светить в скрипте/консоли не придётся.

aureliano15 ★★ ()
Ответ на: комментарий от satewriter128

Если всё равно нужна sudo, значит все пользователи имеют право его выполнять, являясь членами группы wheel, скорее всего. Так и разреши членам этой группы выполнять apt-get через sudo без ввода пароля. Конечно, это потенциальная брешь, но, имхо, меньшая, чем отображение пароля в скрипте или в консоли (а значит, и в истории команд). Да и проще, потому что лишние скрипты городить не надо.

aureliano15 ★★ ()
Ответ на: комментарий от aureliano15

мне кажется ты не понял смфсл скрипта. я его не длаю не для себя. Потому-что для себя я бы через терминал все быстренько забацал. У меня следующая задача - создать скрипт для установки и настройки ssh без прямого использования терминала. Тобишь для тех, кто не понимает или не хочет работать с терминалом. Для тех, кто хочет нажать кнопку -«установить» и скрипт все сделает сам. Минимум действий со стороны пользователя

satewriter128 ()
Ответ на: комментарий от satewriter128

Т. е. ты хочешь, чтоб они по ssh заходили без пароля? Тогда сгенери для каждого ключи, положи их в нужные каталоги, и будут они логиниться без пароля. А для выполнения sudo apt-get на сервере измени на нём sudoers для группы wheel и добавь всех юзеров в эту группу (или просто разреши вообще всем выполнять apt-get без пароля, если таких, кому нельзя этого делать, там не зарегистрировано и не планируется). Ну а скрипт может автоматизировать вход по ssh, установку программ и что хочешь ещё, но, имхо, писать в нём открытым текстом пароли пользователей очень плохая идея, равно как и набирать эти пароли в консоли с сохранением в истории команд.

aureliano15 ★★ ()
Ответ на: комментарий от satewriter128

Ты делаешь скрипт для людей из твоей организации для компьютеров которыми рулишь в своей сети (за которой ты типа следишь) или это скрипт для совсем левых людей?

Exmor_RS ★★ ()
Ответ на: комментарий от Exmor_RS

по моему мы отошли от темы. Давайте не будем думать зачем и почему я так делаю и будем рассматривать текущую ошибку
Я заметил следующую вещь
Если убрать конструкцию типа
(команды) | zenity
и сделать как в коде ниже, то все работает без проблем
значит проблема в передаче значения переменной PASSWD в составной оператор(от export pass=$PASSWD До echo "100" ; sleep 2)

else 
		export pass=$PASSWD 
		echo $pass
		echo "0" ; sleep 2
		echo "# Начинаю обновление пакетов" ; sleep 2	
		echo $pass | sudo -S apt-get update
		echo "25" ; sleep 2
		echo "# Обновление пакетов завершено" ; sleep 2
		echo "# Начинаю установку ssh" ; sleep 2
		echo "30" ; sleep 2
		echo $pass | sudo apt-get install ssh -y
		#$PASSWD yes | sudo apt-get install ssh
		echo "80" ; sleep 2
		echo "# Установка ссн завершена" ; sleep 2
		echo "# Копирование" ; sleep 2
		echo $pass | sudo cp /home/vlad/skr/1test.sh /home/vlad/skr/1test.sh.cop 
		echo "Готово" ; sleep 2
		echo "100" ; sleep 2

satewriter128 ()
Ответ на: комментарий от satewriter128

Поигравшись с конструкцией

|  zenity --progress \
          --title="Конфигурирование" \
          --text="Инициализация..." \
	  --auto-close \
	  --percentage=0 

я понял что дело в ней, а не в скобках ()
но как исправить это, я так и не понял

satewriter128 ()

Не страдай ерундой и используй переменную SUDO_ASKPASS.

#!/bin/bash

if [ "$SUDO_ASKPASS" ]; then
  exec zenity --password
fi

export SUDO_ASKPASS="$0"
sudo -A id
sudo -A whoami
deadNightTiger ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.