Вопрос или проблема
Например, если я подключаюсь к серверу с нескольких офисных компьютеров, как я могу удобно завершить эти 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=))
Разбор команды:
-
pgrep -u $USER sshd
: Эта часть команды ищет все процессыsshd
, запущенные от имени текущего пользователя ($USER
). -
ps -p $$ -oppid=
: Здесь мы получаем идентификатор родительского процесса (parent process ID, PPID) текущей сессии SSH. -
grep -vw $(...)
: Убирает из списка идентификаторов процессов (PID) тот, который соответствует текущей сессии, чтобы не завершить ее. -
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-сессиями может быть простым и эффективным, если использовать правильные команды и методики. Приведенный выше метод позволяет быстро и удобно завершать лишние соединения, поддерживая при этом текущую активную сессию. Это особенно полезно для пользователей, работающих из нескольких мест, желающих контролировать свои сеансы безопасно и эффективно.