Как выйти из двух пользователей в Linux, и при этом выполнить команду один раз?

Иногда, после подключения по SSH у меня возникает необходимость залогинеться под суперпользователя. После успешно выполненной задачи возникает обратная проблема: закрыть подключение ssh. Обычно я это делаю выполняя два раза команду exit в консоли (выйти из суперпользователя, а затем из пользователя подключения ssh).

Вопрос: возможно ли закрыть соединение ssh сразу от суперпользователя?

Команда exit; exit не работает.
  • Вопрос задан
  • 785 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
И не будет, ведь такая команда будет исполняться в одном shell, а не в двух разных. После первого exit дальше уже всё, остаток будет проигнорирован.

Способы есть:

1. Из суперпользователя убить shell пользователя. Некрасиво и неудобно, но закроет оба шелла.

2. Переключение в суперпользователя оформить сразу с выходом, тогда выход из внутреннего сделает выход и из внешнего, например:

sudo -i; exit

Недостаток - если не удастся правильно ввести пароль - сразу же и выкинет. Ну, можно поразбираться с кодами возврата, чтобы не делать exit.

3. Вместо предыдущего можно сделать exec, тогда запускаемая команда заместит текущий shell, а не будет запущена как дочерний процесс:

exec sudo -i

Недостаток тот же - если не ввести правильно пароль, то выкинет.

Но в целом я не вижу во всём этом смысла. Выход можно делать комбинацией Ctrl-D. Нажать дважды Ctrl-D ничто не мешает, это даже удобнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
karabanov
@karabanov Куратор тега Linux
Системный администратор
Ctrl+d
Ctrl+d

Ну или по хардкору (убить ssh сессию):
Enter
~
.
Ответ написан
Комментировать
@rPman
убить оба шела, сессия автоматически завершится

Скрипт для этого пиши сам
ps
покажет список текущих процессов сессии, а там обычно только sudo и bash (ну и работающий ps), так получишь pid текущего bash
pstree -s pid_текущего_шела -p
покажет в одной строчке всех предков от указанного процесса, например так
systemd(1)───xfce4-terminal(3933)───bash(5169)───sudo(1726858)───sudo(1726872)───bash(1726873)───pstree(1732257)

тебе достаточно убить два последних sudo и bash (или чем ты там пользуешься) с конца этого списка
например так
kill -KILL 1726873 1726872 1726858 5169
Ответ написан
Комментировать
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Погуглить “drop ssh connection“
Ответ написан
Комментировать
AshBlade
@AshBlade
Просто хочу быть счастливым
Вопрос: возможно ли закрыть соединение ssh сразу от суперпользователя?

Вынуть шнур питания из розетки

Серьезно - нет. Тем более это не то, что стоит автоматизировать
Ответ написан
Комментировать
ophil
@ophil
https://ophilon.github.io
настрой доступ по ключу и отправь команду:
ssh user@host 'id;sudo id;script1 && sudo script2'
всё само откроется и закроется
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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