Как выйти из ssh linux
Обновлено: 21.11.2024
Если вы вошли в удаленную систему Linux через SSH, вам просто нужно использовать команду выхода, чтобы выйти из SSH.
Все в порядке. Но что, если вы хотите отключить другого пользователя от SSH-соединения?
В этом кратком совете я покажу вам, как можно удалить любого пользователя из системы.
Выход пользователя из сеанса SSH
Сначала проверьте список пользователей, выполнивших вход на ваш сервер Linux. Есть разные способы сделать это. Я буду использовать команду who с опцией -u. Этот параметр отображает идентификатор процесса сеанса оболочки входа пользователей.
Вот пример вывода:
Теперь представьте, что я хочу исключить использование пракаша из сеанса SSH. Идентификатор процесса его сеанса оболочки — 32004. Если вы завершите сеанс оболочки входа в систему, пользователь будет отключен.
Для этого вы можете использовать команду kill для отправки сигнала SIGHUP. Этот сигнал используется для сообщения о том, что терминал пользователя отключен. Это также эффективно отключает все процессы в сеансе от управляющего терминала.
Конечно, для выполнения такого действия нужно быть пользователем root или sudo.
Есть несколько вещей, которые вы должны знать и делать.
Отправить сообщение перед завершением сеанса
Рекомендуется сообщить конечному пользователю перед завершением его/ее сеанса. Вы можете использовать команду записи, чтобы быстро отправить сообщение пользователю следующим образом:
Принудительно завершить сеанс SSH, если SIGNHUP не работает
Если сигнал SIGHUP не работает, отправьте сигнал SIGKILL.
Вы также можете выйти из выбранного сеанса пользователя, если у него более одного сеанса SSH
Если один и тот же пользователь вошел в систему с нескольких систем или терминалов, это повлияет только на сеанс, который вы завершаете. Пользователь не будет исключен из всех сеансов.
Это тот случай, когда ваш сеанс SSH зависает по какой-либо причине, например из-за отключения сети. Вы можете закрыть терминал и открыть другой сеанс SSH с нового терминала, но теперь вы видите, что дважды вошли в систему.
В таком случае вы можете закрыть сеанс, который больше не должен быть активным.
Вы можете определить, какого пользователя запустить, по времени входа в систему, которое отображается в выводе команды who. Не волнуйтесь, в худшем случае вы вылетите из текущего сеанса. Но затем вы можете снова войти в систему.
Я надеюсь, что этот краткий совет помог вам выйти из сеанса SSH пользователя в Linux. Ваши вопросы и предложения приветствуются.
Есть ли способ отказаться от всех SSH-соединений и закрыть PuTTY одним махом? Я работаю в Windows 7 и использую PuTTY для подключения по SSH к различным хостам Linux.
Пример того, как я работаю:
Как указано выше, есть ли способ перейти от host8 к закрытию PuTTY за один раз? Иногда я оказываюсь на глубине до 5 или 10 хостов. Я понимаю, что могу щелкнуть X, чтобы закрыть окно PuTTY, но мне нравится убедиться, что мои SSH-соединения закрываются правильно с помощью команды выхода. Я также понимаю, что прошу совета о том, как увеличить лень. Я просто напишу это как "как я могу быть более эффективным".
@UlrichDangel Я никогда раньше этим не пользовался, но это также быстрый способ быстро отказаться от подключения.
Вы действительно вкладываете сеансы ssh на уровне от 5 до 10? Вы понимаете, что это создает запутанный туннель, который перенаправляет все пакеты в вашем сеансе ssh через все эти хосты? Не могли бы вы решить эту проблему, просто отказавшись от вложения сеансов ssh?
@jw013 Нет, я этого не понимал, но в этом есть смысл. Честно говоря, 5-10 уровней было преувеличением, но я пытался проиллюстрировать свой вопрос "как чисто выйти из Putty одним махом".
7 ответов 7
Попробуйте использовать управляющую последовательность завершения соединения ssh.
В сеансе ssh введите ~. (тильда точка). Вы не увидите символы при их вводе, но сеанс будет немедленно завершен.
Очень круто! Любой способ поставить ~. в псевдоним или функцию? Просто чтобы дать ему легко запоминающееся имя, например exitall . Теперь я прошу слишком много :). Я попробовал несколько вещей в ~/.bashrc, но получил -bash: ~.: команда не найдена. Я предполагаю, что bash видит это как строку, а не управляющую последовательность, поступающую непосредственно с клавиатуры.
И нет никакой гарантии, что PuTTY тоже это сделает. Клиент CLI ssh нуждается в этой технике, потому что это CLI. PuTTY — это приложение с графическим интерфейсом, и есть гораздо более удобные способы сделать это в графическом интерфейсе.
Просто нажмите Ctrl + D, чтобы выйти, и вы выйдете из системы. Удерживая нажатой клавишу Ctrl, несколько раз нажмите D, чтобы выйти из нескольких окон, вкладок или уровней, пока окно не исчезнет.
К сожалению, это не работает повсеместно. Любой сеанс, в котором запущен редактор или другой полноэкранный инструмент, скорее всего, проигнорирует EOT. И даже bash проигнорирует его в середине командной строки. Попробуйте сами: введите одну букву и попробуйте Ctrl-D .
Просто закройте PuTTY. (Alt + F4 по умолчанию IIRC.)
Если вы не против написать небольшой сценарий, вы можете сделать это.
Вызов с помощью команды точки:
Если вы хотите выйти с одного уровня:
Если вы хотите выйти из всего:
Конечно, вам пришлось бы скопировать его на каждый компьютер, с которого вы когда-либо подключались по ssh. Кроме того, не проще ли было бы просто определить функцию оболочки с именем ssh? Это позволит избежать предыдущего периода и т. д.
Еще один способ — создать функцию для ssh:
К сожалению, он также всегда будет закрывать соединение и выходить из консоли после того, как вы закончите работу в удаленной системе.
Обратите внимание, что вам нужно сделать такую функцию на всех ваших серверах, иначе этот хак не сработает. Кстати, вы всегда можете поместить функцию в ~/.bashrc или ~/.whatever_shell_you_use_rc .
По сравнению со способом Утера это выглядит немного грязно.
функция не соответствует стандарту POSIX — просто удалите ключевое слово, и вам нужно правильно заключить $@ в кавычки, иначе ваши аргументы будут переданы после разделения слов (плохо).
Или вы можете использовать exec для замены процесса оболочки на ssh при переходе на другой хост:
5 уровней в глубину — это некрасиво, так как трафик будет проходить через все остальные серверы. Из-за этого я не рекомендую просто убивать PuTTY или ssh (~.), поскольку (в зависимости от того, что вы делаете) это может привести к зависшим процессам на серверах.
Лучше постараться быть менее "ленивым". Щелчок правой кнопкой мыши на строке заголовка puttys позволяет быстро открыть новый сеанс. Если у вас есть сервер «по умолчанию» и вы принимаете 1 прыжок с него, функция «Дублировать сеанс» очень полезна. Особенно при использовании аутентификации по открытому ключу.
Как отключить зависший сеанс ssh в Linux. отключить зависший сеанс ssh в Unix, завершить зависший сеанс ssh. убить неотвечающий сеанс ssh в Unix. Убейте зависшую сессию ssh. Завершите зависший сеанс ssh в Linux. убить сеанс ssh в Linux. Закрыть ssh-соединение. Завершите неотвечающий сеанс ssh в LInux. Автоматически завершить или отключить зависший сеанс ssh с помощью ServerAliveInterval. Автоматически завершить сеанс PSSH, используя тайм-аут в Linux. Отключить зависший сеанс pssh в Linux через определенный период времени. Автоматическое завершение зависшего сеанса ssh в Linux. Автоматически отключать зависший сеанс ssh в Unix.
В этой статье мы рассмотрим различные примеры по теме, чтобы завершить зависший сеанс ssh, то есть отключить зависший сеанс ssh в Linux, но если вы хотите автоматически отключить незанятый сеанс, я написал другую статью, в которой я поделился шагами. и примеры автоматического отключения незанятого сеанса ssh в Linux.
Что такое неотвечающий сеанс SSH?
Под неотвечающим сеансом SSH мы подразумеваем, что соединение SSH не отвечает или перестало отвечать между хостом и клиентом. Эта ситуация может возникнуть по разным причинам, чаще всего из-за сетевых колебаний между сервером и клиентом. Вы можете перечислить все активные соединения SSH, а затем проверить время простоя, чтобы узнать их текущий статус. Вы также можете получить их PID с удаленного хоста, чтобы вручную завершить неотвечающий сеанс ssh.
Завершить зависший сеанс ssh
Существует «секретное» сочетание клавиш, позволяющее принудительно завершить неотвечающий сеанс ssh.
В терминале замороженного сеанса нажмите эти клавиши по порядку: Enter → ~ → . Тильда (только после символа новой строки) распознается ssh-клиентом как управляющая последовательность, а точка сообщает клиенту о том, что ему следует прекратить работу без дальнейших церемоний.
Это должно быть выполнено в замороженном сеансе в порядке, указанном для закрытия не отвечающего сеанса ssh.
На справочной странице SSH
Здесь я создал активный сеанс от узла 1 к узлу 2, используя пользователя "deepak". Сейчас этот сеанс находится в зависшем состоянии.
Здесь я нажал "Enter", а затем ~ и .
Здесь нажмите ~ и . (точка) будет скрыта и не будет видна на экране. Но после завершения этой последовательности сеанс будет немедленно завершен.
Как видите, мой зависший сеанс завершен, и я вернулся на свой локальный хост.
При работе с вложенными сеансами SSH вы можете добавить несколько символов тильды, чтобы прервать только один из сеансов SSH в цепочке, но сохранить остальные. Например, если вы вложены в 3 уровня (т.е.вы ssh от локального → Machine1 → Machine2 → Machine3), введите → ~ → . вернет вас к вашему локальному сеансу, введите → ~ → ~ → . оставит вас в Machine1 и нажмите Enter → ~ → ~ → ~ → . оставит вас в Machine2. Это работает и для других escape-последовательностей, таких как временное перемещение сеанса ssh в фоновый режим. Вышеупомянутое работает для любого уровня вложенности, просто добавив больше тильды.
Например:
Здесь я создал активный сеанс SSH с узла 1 на узел 2 и с узла 2 на узел 3, т. е. узел 1 → узел 2 → узел 3
Теперь я отключу застрявший сеанс SSH от узла 3 к узлу 2 вместо узла 1. Поэтому я нажму Enter → ~ → ~ → .
Автоматическое отключение зависшего сеанса SSH
Теперь в приведенном выше примере вы вручную завершали зависший сеанс ssh, но для автоматического отключения зависшего сеанса SSH или когда вы автоматизируете задачу, и ваш процесс SSH зависает, в таких случаях лучше, чтобы сам SSH отключился. Сам сеанс SSH, а не кто-то, вручную вмешивающийся и убивающий процесс.
В этом случае вы можете использовать " ServerAliveInterval " для автоматического отключения зависшего сеанса SSH.
Со страницы руководства:
Таким образом, используя ServerAliveInterval, вы можете установить значение времени ожидания, которое будет использоваться, если предоставленный сеанс SSH перестанет отвечать. Вы можете использовать это либо через командную строку, либо создав файл ssh_config в домашнем каталоге соответствующего пользователя.
Способ 1:
При установке SSH-соединения используйте " -o ServerAliveInterval=XX " вместе с командой SSH. здесь замените " XX " подходящим значением времени ожидания.
Например:
Я запускаю сеанс SSH с узла 1 на узел 2 и отключу интерфейс сетевой карты. Теперь это не лучший сценарий для зависания сеанса, но это поможет объяснить наши шаги и пример. Теперь здесь я указал интервал в 5 секунд, и TCP-пакет будет отправлен два раза перед отключением сеанса.
Из журналов отладки, напечатанных на экране, видно, что два пакета отладки отправляются перед отключением сеанса
Теперь здесь, как и ожидалось, мой сеанс был автоматически отключен после отправки 2 TCP-пакетов с интервалом в 5 секунд.
Способ 2:
Вы можете настроить эти значения для каждого пользователя, создав новый файл ssh_config в домашнем каталоге пользователя. Например, если домашний каталог моего пользователя /home/deepak/, создайте следующий файл
Добавить контент ниже
Здесь * используется для обозначения любого подходящего хоста. Если вы хотите ограничить его для определенного хоста, укажите IP/имя хоста.
Способ 3:
Наконец, вы можете обновить /etc/ssh/ssh_config и добавить те же значения. Это была конфигурация не на уровне пользователя, а на уровне системы
Добавить контент ниже
Использовать тайм-аут для завершения сеанса SSH
Вы можете дополнительно использовать команду timeout для отключения зависшего сеанса SSH. Чтобы определить значение времени ожидания для активного сеанса.
Преимущество здесь в том, что если для автоматизации вы используете команду ssh и не хотите, чтобы скрипт автоматизации зависал во время выполнения, вы можете использовать команду тайм-аута, чтобы закрыть сеанс по истечении определенного периода времени.
Со страницы руководства timeout:
Например:
Я создал скрипт для перехвата SIGTERM и отслеживания хода тайм-аута
Добавление ключа -k 12 указывает тайм-аут для отправки SIGKILL процессу через 12 секунд после начального SIGTERM. Снова сообщение «SIGTERM получено» отображается через 3 секунды в результате сигнала SIGTERM. Через двенадцать секунд после этого весь сценарий уничтожается. Он не завершает второй 20-секундный сон и не отображает после него сообщение Finished. Это более действенный способ справиться с тайм-аутом.
Аналогичным образом вы можете использовать тайм-аут с командой SSH. Предполагая, что вы знаете, что выполнение вашей SSH-команды займет 10 секунд, вы можете установить тайм-аут в 20 секунд в качестве жесткого периода для закрытия сеанса
Отключить сеанс PSSH
PSSH — это еще один инструмент для выполнения SSH (параллельного) вместо последовательного. Теперь в PSSH есть внутренний аргумент, который можно использовать для уничтожения активной сессии по истечении определенного периода времени. Вам не нужно зависеть от каких-либо дополнительных инструментов для отключения сеанса SSH.
На справочной странице pssh:
Например:
Выполните pssh, используя приведенный ниже синтаксис, чтобы автоматически выполнить тайм-аут через 30 секунд
Поэтому, как и ожидалось, сеанс PSSH был автоматически завершен сигналом тайм-аута после указанного значения тайм-аута.
Наконец, я надеюсь, что шаги из статьи по отключению зависшего сеанса SSH или не отвечающего сеанса SSH в Linux были полезны. Итак, дайте мне знать ваши предложения и отзывы, используя раздел комментариев.
Похожие записи
Не нашли то, что искали? Выполните быстрый поиск в GoLinuxCloud
Если мои статьи о GoLinuxCloud помогли вам, пожалуйста, купите мне кофе в знак признательности.
Для любых других отзывов или вопросов вы можете использовать раздел комментариев или форму обратной связи.
Спасибо за поддержку!!
3 мысли о “Как завершить или отключить зависший сеанс ssh в Linux”
единственная статья, которую я нашел в гугле (не в интернете, а в гугле 🙂 )
в которой правильно описывается, как убить очень длинный SSH-сеанс, установив/определив жесткие ограничения.
Я уже давно в этом бизнесе, и меня всегда раздражало, что я не знаю, как убить только один вложенный сеанс ssh, а не всю цепочку. Я счастлив, что наткнулся на вашу страницу!
Это здорово. Меня всегда раздражали зависшие ssh сессии и приходилось их убивать с помощью ps -a, kill и прочих ухищрений. Эта статья прекрасно объясняет решение, и я избавлен от необходимости выполнять так много не очень удобных действий только для того, чтобы избавиться от зависшего сеанса ssh.
Пользователям необходимо подключиться к удаленному хосту с помощью SSH (Secure Shell) для удаленного запуска различных команд для различных целей. Это помогает пользователю легче выполнять свою задачу. Многие административные задачи могут выполняться пользователем удаленно с помощью нескольких простых шагов, которые экономят время и усилия пользователя. Пользователю может потребоваться удаленно запустить одну или несколько команд SSH и безопасно завершить соединение с удаленного хоста. В этом руководстве показано, как запустить команду SSH на удаленном хосте и выйти из нее.
Предпосылки:
Прежде чем приступить к выполнению шагов этого руководства, необходимо выполнить следующие шаги.
Включите службу SSH в Ubuntu, если она не была включена ранее.
Создайте пары ключей SSH для выполнения команд на удаленном сервере. Выполните следующую команду, чтобы создать открытый ключ и закрытый ключ. Закрытый ключ будет храниться на удаленном сервере, а открытые ключи будут надежно храниться на клиенте.
Выполните следующую команду, чтобы открыть файл sshd_config с помощью редактора nano и добавить некоторые необходимые конфигурации.
Добавьте следующие строки в файл, чтобы включить вход root и аутентификацию на основе пароля.
Выполните следующую команду, чтобы перезапустить службу SSH.
Запуск различных типов команд SSH:
Вы можете проверить задачи команд SSH, используя удаленный сервер или локальный сервер. Здесь использовались две учетные записи пользователей Ubuntu для запуска команд SSH на локальном сервере. Одна учетная запись пользователя использовалась в качестве клиента, а другая учетная запись пользователя использовалась в качестве сервера в этом руководстве, чтобы проверить способ выполнения команды на сервере с клиентского компьютера с помощью SSH.
Выполните одну команду:
Выполните следующую команду, чтобы выполнить команду `ls` на удаленном хосте, используя имя хоста. Здесь «[email protected]» работал как клиентский компьютер, а «[email protected]» работал как сервер.
Следующий вывод показывает список всех файлов и папок текущего каталога удаленного хоста. Здесь имя пользователя удаленного хоста — «fahmida».
Выполните следующую команду, чтобы выполнить команду `pwd` на удаленном хосте, используя IP-адрес удаленного хоста. Здесь «[email protected]» работал как клиентский компьютер, а «[email protected]» работал как сервер.
Следующий вывод показывает путь к текущему рабочему каталогу удаленного хоста, где имя пользователя удаленного хоста — fahmida.
Выполнить несколько команд:
Выполните следующую команду, чтобы выполнить три команды, `date,` `pwd` и `df`, используя одну команду SSH на удаленном хосте, используя имя хоста. Здесь «[email protected]» работал как клиентский компьютер, а «[email protected]» работал как сервер.
Следующий вывод показывает вывод трех команд после выполнения на удаленном хосте, где имя пользователя удаленного хоста — fahmida.
Запуск нескольких команд с конвейером:
Создайте текстовый файл с именем fruit.txt со следующим содержимым на удаленном хосте, используемом в следующей команде SSH.
фрукты.txt
Выполните следующую команду SSH с клиентского терминала, чтобы проверить содержимое файла fruit.txt, существующего на сервере.
Выполните следующую команду SSH с клиентского терминала, чтобы проверить, существует ли слово «манго» в файле fruit.txt.
Выполните следующую команду SSH с клиентского терминала, чтобы проверить, существует ли слово «Jackfruit» в файле fruit.txt.
После выполнения трех вышеуказанных команд SSH появится следующий вывод. Следующий вывод показывает, что в файле есть манго, а джекфрут не существует.
Выполнить команду для выполнения скрипта:
В этой части руководства показано выполнение любого сценария bash на удаленном узле с помощью команды SSH. Создайте файл bash с именем read.sh со следующим сценарием на удаленном хосте. Сценарий примет входное значение от пользователя и распечатает введенное значение, объединив его с другой строкой после выполнения.
read.sh
read -p "Вам нравится манго?" и
echo "Вау! Вам нравится $answer ."
Выполните следующую команду SSH, чтобы проверить содержимое файла read.sh, расположенного на удаленном хосте.
Следующий вывод появится, если файл существует на удаленном хосте.
Выполните следующую команду SSH, чтобы подключиться к удаленному хосту с помощью IP-адреса.
Выполните следующую команду, чтобы выполнить файл read.sh после входа на удаленный хост.
После выполнения вышеуказанных команд появится следующий вывод. Файл bash был выполнен здесь два раза с двумя разными значениями.
Запустите команду `sudo`:
В этой части руководства показано выполнение команды `sudo` после входа на удаленный хост с помощью команды SSH.
Выполните следующую команду SSH, чтобы войти на удаленный хост, используя IP-адрес удаленного хоста.
Выполните следующую команду, чтобы установить Python на удаленном хосте после успешного входа в систему. Он запросит пароль имени пользователя удаленного хоста, чтобы начать процесс установки.
После выполнения указанных выше команд появится следующий вывод.
Закрыть SSH:
Выполните следующую команду, чтобы разорвать соединение с удаленного хоста.
Вывод:
В этом руководстве были показаны способы выполнения одной и нескольких команд, команды с каналом, команда для запуска определенного файла bash и использование команды `sudo` на удаленном хосте. Читатель запустит команду SSH на удаленном хосте после того, как внимательно прочтет это руководство.
Об авторе
Фахмида Есмин
Я веду курсы веб-программирования. Мне нравится писать статьи или учебные пособия на различные темы в области ИТ. У меня есть канал на YouTube, на котором публикуются различные учебные пособия по Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel и т. д.: Справка Tutorials4u.
Читайте также: