выйдите из системы текущий пользователь из сценария

Я хотел бы создать сценарий что:

  1. выполните некоторые команды
  2. выполните sudo su - [некоторое другое имя пользователя]
  3. после того, как я выхожу от [некоторое другое имя пользователя]-> выход из системы

Пример: test.sh

echo "test script"
sudo su
logout

Если я запускаю скрипт как это:

echo "test"
sudo su
whomai

Я получаю требуемый результат:

[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#

Как Вы видите, сценарий выполняет мою команду эха и затем меня sudo su для укоренения, где я могу сделать то, что я должен сделать и после того, как я вышел из корневой сессии, сценарий выполняет последнее (whoami) команда.

Моя проблема состоит в том, что я не могу выйти из системы сам в конце этого сценария.

Мне нужен способ сделать это без полномочий пользователя root.

Кто-то может помочь мне?

Дополнительное объяснение:

  1. когда я выполняю sudo su - имя пользователя (Усера), я должен обеспечить свой пароль (wolfy) для входа в систему как другой пользователь (Усера). Затем я работаю на целую встречу с тем пользователем (Усера) и когда я выхожу из системы от того пользователя (Усера), я хотел бы к автоматическому выходу из системы от моего (wofly) пользователя.
  2. использование sudo команда не является опцией
1
задан 19 June 2015 в 14:57

3 ответа

Возможно, все, что Вы хотите сделать:

exec ./test.sh

Это заменяет Ваш текущий процесс оболочки сценарием, так, чтобы, когда это заканчивается, не было ничего для выполнения.

5
ответ дан 3 December 2019 в 06:25

logout в сценарии ни на что не влияет, с тех пор logout только работы для оболочек входа в систему, и сценарии обычно не выполняются как оболочки входа в систему.

мне кажется, что Вы входите в систему через SSH (или что-то), работая как другой пользователь и сразу выходить из системы. В этом случае просто получите сценарий, так, чтобы команды были выполнены в Вашей текущей оболочке. Затем logout будет работать.

Или, можно использовать exec, но в этом случае, это не logout, это вступает в силу - logout, перестанет работать, и конец сценария просто заставляет его выходить. Различие без различия, я предполагаю.

Или, если Вы находите его громоздким для использования . ./script, определяют функцию с фигурными скобками:

switchuser () {
  echo "test script"
  sudo su -
  exit
}

Команды в фигурных скобках, выполненных в текущей оболочке и командах в круглых скобках, выполняются в подоболочке. Добавьте это к Вашему .bashrc, тогда можно просто сделать:

switchuser
1
ответ дан 3 December 2019 в 06:25

Как правило, выполнять команду как корень, sudo достаточно.

#!/bin/bash
echo test
sudo whoami

Если Вы настаиваете на том, чтобы использовать su, по любой причине можно использовать флаг-c:

#!/bin/bash
echo test
sudo su -c whoami

И вот результат, то же в обоих случаях:

$ ./test.sh                                                                                                                           
test
[sudo] password for xieerqi: 
root

Если Вы хотите ввести корневую оболочку, использовать sudo -i

serg@ubuntu[/home/xieerqi] 
$ sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi] 
$ 

С su:

serg@ubuntu[/home/xieerqi] 
$ sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi] 
$ whoami
xieerqi

Если Вы хотите к командам выполнения как другой пользователь, не только корень, можно использовать sudo -u username command

$ sudo -u testuser whoami
testuser

Та же идея с su:

serg@ubuntu[/home/xieerqi] 
$ sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi] 
$ whoami
xieerqi
1
ответ дан 3 December 2019 в 06:25

Другие вопросы по тегам:

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