Есть ли простой способ завершить все другие сеансы SSH, которые я (пользователь) открыл на сервере, но при этом сохранить текущий сеанс SSH через командную строку?

Вопрос или проблема

Например, если я подключаюсь к серверу с нескольких офисных компьютеров, как я могу удобно завершить эти ssh-сессии дома, когда я подключаюсь к серверу?

kill -9 $(pgrep -u$USER sshd | grep -vw $(ps -p$$ -oppid=))
# если необходимо, замените $USER на $(id -u)

Чтобы было удобно, поместите это в функцию или алиас, установленный в вашем профиле/shrc/etc или в скрипт.

Ответ или решение

В условиях работы в нескольких местах, таких как офис и дом, пользователю может понадобиться остановить все запущенные SSH-сессии на сервере, кроме той, которая является активной в данный момент. Это может быть необходимо для обеспечения безопасности или освобождения ресурсов сервера. Рассмотрим, как это можно сделать, используя командную строку Linux.

Решение проблемы с SSH-сессиями

Для завершения всех SSH-сессий, кроме текущей, вы можете использовать команду, которая сочетает в себе команды pgrep, grep и kill. Приведенная ниже команда позволяет реализовать данную задачу:

kill -9 $(pgrep -u $USER sshd | grep -vw $(ps -p $$ -oppid=))
Разбор команды:
  1. pgrep -u $USER sshd: Эта часть команды ищет все процессы sshd, запущенные от имени текущего пользователя ($USER).

  2. ps -p $$ -oppid=: Здесь мы получаем идентификатор родительского процесса (parent process ID, PPID) текущей сессии SSH.

  3. grep -vw $(...): Убирает из списка идентификаторов процессов (PID) тот, который соответствует текущей сессии, чтобы не завершить ее.

  4. kill -9 $(...): Эта часть завершает все процессы, PID которых были собраны в предыдущих командах. Флаг -9 используется для принудительного завершения процессов.

Упрощение выполнения команды

Для удобства можно поместить эту команду в функцию или алиас в вашем профиле оболочки (.bashrc, .bash_profile, .profile и т. д.). Например, вы можете добавить следующую функцию в ваш .bashrc файл:

function kill_other_ssh_sessions() {
    kill -9 $(pgrep -u $USER sshd | grep -vw $(ps -p $$ -oppid=))
}

После добавления этой функции вы сможете просто вызвать kill_other_ssh_sessions, когда вам потребуется завершить лишние SSH-сессии.

Важные моменты:

  • Безопасность: Используйте принудительное завершение процессов (-9) с осторожностью. Лучше сначала попробовать мягкое завершение процессов (kill) без этого флага.
  • Доступ и права: Убедитесь, что у вас есть соответствующие права доступа для завершения процессов на данной системе.
  • Осторожность с использованием оболочки: При добавлении или изменении команд в файлах конфигурации оболочки всегда будьте осторожны, чтобы не повредить работу вашей системы.

Заключение

Управление SSH-сессиями может быть простым и эффективным, если использовать правильные команды и методики. Приведенный выше метод позволяет быстро и удобно завершать лишние соединения, поддерживая при этом текущую активную сессию. Это особенно полезно для пользователей, работающих из нескольких мест, желающих контролировать свои сеансы безопасно и эффективно.

Оцените материал
Добавить комментарий

Капча загружается...