Вопрос или проблема
Я недавно установил сервер OpenSSH и клиент OpenSSH, которые идут с Windows 11.
Когда я выключаю сервер, все входящие ssh-запросы отклоняются, как и должно быть. Но уже установленные соединения продолжают работать, несмотря на отключение сервера, отключение перенаправления портов и так далее.
Я подтвердил, что установленные соединения все еще активны, используя команду netstat -an | sls ':22'
и увидев, что установленные соединения все еще работают. Команды, которые зависят от ssh, такие как scp
, продолжают загружать данные через установленное SSH-соединение.
Есть ли способ (насильно) отключить установленные соединения со стороны сервера ssh в Windows?
Я бы предпочел иметь возможность отключать определенные установленные соединения на основе их IP-адреса или на основе входа пользователя, или даже отключать их все сразу, но что угодно было бы отлично.
Дополнительная информация:
Обычно я запускаю сервер с помощью Start-Service sshd
и останавливаю сервер с помощью Stop-Service sshd
. Я подтверждаю, что сервер остановлен, с помощью Get-Service -Name sshd
, который показывает, что сервер был остановлен после использования команды Stop-Service sshd
.
Ответ или решение
Как закрыть установленные соединения SSH после остановки сервера SSH на Windows?
Ситуация, с которой вы столкнулись, является довольно распространенной при использовании OpenSSH на Windows. При остановке службы sshd
действующие SSH-соединения продолжают оставаться активными, что может создавать проблемные ситуации, особенно при необходимости завершить нежелательные или неавторизованные подключения. Ниже мы рассмотрим, как можно управлять установленными соединениями и принудительно их закрыть.
Проблема и её суть
При отключении сервера SSH с помощью команды Stop-Service sshd
, все входящие SSH-запросы действительно блокируются, и новые соединения уже не могут быть инициированы. Однако уже активные сессии продолжают функционировать до тех пор, пока они не будут закрыты на стороне клиента или сервер не перезагрузится. Это может быть нежелательно, если необходимо обеспечить безопасность системы или предотвратить выполнение каких-либо операций.
Способы принудительного отключения SSH-соединений
-
Использование команд для завершения процессов:
Windows предоставляет возможность завершить процессы, связанные с установленными соединениями. Для этого можно использовать команду PowerShell или командную строку:Get-NetTCPConnection -LocalPort 22 | Where-Object { $_.State -eq 'Established' } | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }
Эта команда находит все устоявшиеся соединения на порту 22 (по умолчанию для SSH) и завершает соответствующие процессы.
-
Идентификация соединений по IP или пользователю:
Если вам нужно закрыть соединения на основании IP-адреса или имени пользователя, вы можете модифицировать команду выше. Например, чтобы отключить только соединения от определенного IP:$ipToTerminate = '192.168.1.100' # Замените на нужный IP Get-NetTCPConnection -LocalPort 22 | Where-Object { $_.RemoteAddress -eq $ipToTerminate -and $_.State -eq 'Established' } | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }
Подобная команда позволит вам точечно управлять соединениями.
-
Использование утилиты
netstat
для мониторинга соединений:
Если нужно получить информацию о текущих соединениях перед их отключением, вы можете использовать следующую команду:netstat -an | findstr :22
Это поможет вам увидеть все соединения и их статусы перед тем, как предпринимать действия по завершению.
-
Запись скрипта для автоматизации:
Если вы часто сталкиваетесь с необходимостью закрывать соединения, рекомендуется создать PowerShell-скрипт, который будет выполнять вышеописанные действия автоматически. Скрипт может быть вызван, когда вам потребуется отключить определенное соединение или все активные соединения.
Заключение
Управление установленными SSH-соединениями в Windows может оказаться сложным, однако с помощью PowerShell и команды netstat
вы можете эффективно контролировать и завершать активные сессии. Важно следить за безопасностью и целостностью ваших систем, особенно когда дело касается доступа через SSH. Используйте описанные методы аккуратно, чтобы избежать ненужного вывода из строя легитимных процессов и сессий.