У меня есть несколько устройств, которые могут обслуживаться через сервер.

Поскольку устройства подключаются через сеть GPRS с заблокированными входящими подключениями, я проверяю их на сервере каждые несколько минут. Сервер ответит, если обратный туннель SSH необходим команде поддержки, и обработает доступный порт на сервере.

Как только этот порт будет обработан на клиентском устройстве, устройство откроет обратный туннель ssh для учетной записи с ограниченными правами (оболочка недоступна из-за директивы command="/sbin/nologin" в файле authorized_keys ) с этой командой:

ssh -fN -R $AVAILABLE_PORT:localhost:22 srvUsername@srvHost -i Indentity

На сервере я вижу, что доступный порт использовался с netstat -tulpn с таким выводом:

tcp        0      0 127.0.0.1:PORT              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::1:PORT                    :::*                        LISTEN      -

И этот порт будет прослушиваться, пока я не уничтожу процесс ssh на клиентском компьютере, который его открыл.

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

Есть ли способ закрыть этот сокет со стороны сервера без перезапуска службы ssh?

Соединения GPRS являются нестабильными, поэтому я могу столкнуться с ситуацией, когда я исчерпал все доступные порты и должен ждать, пока они не истекут. Также я полагаю, что клиенты успешно завершают процесс ssh, когда соединение больше не требуется. Я хотел бы сделать это на стороне сервера.

1 ответ1

2

запустить как sudo:

sudo netstat -tulpna | grep PORTNUM

Последний столбец покажет PID/sshd

sudo kill -9 PID

сделанный.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .