Выйдите из оболочки с помощью ярлыка (без ввода exit), который правильно закрывает сессию

12

Я использую команду ProxyJump для нескольких сессий ssh, которые я использую ежедневно, а также часто переключаю пользователей на этих сессиях, и необходимость набирать exit3 или 4 раза подряд не слишком увлекательна.

Мне известно о newline+ ~+ .для завершения сеанса SSH, мне все еще нужно проверить, завершает ли он это по-дружески, как если exitбы, но как вы выходите из всех сеансов в текущей оболочке с помощью одной команды или ярлыка, чтобы набрать exit3 или 4 раза в моём случае становится разовой вещью?

tsujp
источник
2
~.просто отключает ваш SSH-клиент (это полезно, например, когда сеть исчезла). Обычно демон SSH распознает это и сигнализирует о своем сеансе SIGHUP, так что это не совсем то же самое, что обычный выход из оболочки (но это полезно, если вы не можете получить ответ от оболочки).
Тоби Спейт

Ответы:

29

Ctrl- Dвыйдет из оболочки во многих случаях. Это быстрее, чем печатать exit Enter. Это все еще не одна команда, чтобы завершить все, но удерживать Ctrlи нажимать Dнесколько раз легче и быстрее. Не уверен, насколько это ценно для вашего варианта использования.

Подробно обсуждается здесь .

0xSheepdog
источник
2
Следующая остановка - unix.stackexchange.com/a/182071/5132 , и остановка после этого - дальнейшее чтение там. (-:
JdeBP
2
Будьте осторожны с CTRL + D. В bash, если в вашем приглашении введены какие-либо символы, нажатие CTRL + D выполнит его так же, как и Enter. Другими словами, не вводите rmкоманду, а затем нажмите CTRL + D, если вы не хотите ее выполнять. Я не вижу такого поведения в ksh.
Пешке
2
@Peschke В каждой системе, которую я когда-либо использовал, Ctrl + D ничего не делает, если я что-то набрал. Я никогда не видел поведение, которое вы описываете.
Джон Кугельман
1
@JohnKugelman Я протестировал и подтвердил поведение во время моего комментария с помощью bash на RHEL 7.5.
Пешке
3
Пешке использует viклеммы ввода терминала.
JdeBP
5

Типизация на ~.самом деле позволяет закрыть все «вложенные» соединения до самого глубокого.

Это достигается с помощью дружественного выхода, который вы хотите, при условии, что все ваши снаряды настроены на обработку SIGHUP как грациозной смерти. Bash делает это по умолчанию. Вы можете легко проверить дружественный выход для вашей установки, например, посмотрев, .bash_historyправильно ли обновляются файлы ваших более глубоких сессий после ~., или если вы настроили свои bash-es не обновлять .bash_history при выходе, тогда вы можете установить trapна Событие EXIT (или в вашем ~/.bash_logout) с командой, которая записывает что-то куда-нибудь, а затем видит, выполнено ли это.

Кроме того, я не уверен, что вы подразумеваете под «выходом из всех сессий в текущей оболочке». Каждый интерактивный bash - это всего лишь один сеанс, и вводимые вами команды всегда идут только в самую глубокую оболочку цепочки ProxyJump. Если вы имели в виду «фоновые задания в текущей оболочке», bash отправляет SIGHUP всем своим заданиям при получении SIGHUP демоном ssh на s ~., поэтому такой выход должен быть полностью дружественным, если эти выполняющиеся задания правильно реагируют на SIGHUP.

LL3
источник