Назад | Перейти на главную страницу

Как закрыть существующий туннель SSH?

В Windows я создаю задание по расписанию при запуске Windows:

C:\cygwin64\bin\ssh.exe -R 2222:127.0.0.1:3389 user@PublicHost

чтобы открыть мою службу rdp на сервере общедоступного IP, и я могу успешно подключить rdp, но я не могу найти ssh.exe в диспетчере задач, и когда я закрываю окна, иногда порт 2222 PublicHost не освобождается, поэтому позже я загружаюсь снова Windows, ssh.exe выдаст мне предупреждение, переадресация порта не удалась.

Есть ли способ попросить PublicHost освободить порт (у меня нет root-прав на PublicHost)?

Я бы посоветовал посмотреть на ClientAliveCountMax и ClientAliveInterval Параметры sshd_config - это поможет sshd обнаружить соединение, которое неконтролируемо разорвалось, и очистить его в таком случае.

Если вы просто подключаетесь к порту 2222 PublicHost, он должен попытаться отправить трафик через туннель. Это приведет к тайм-ауту (через несколько минут) или получению ответа сброса (немедленно), что приведет к закрытию соединения и завершению процесса sshd.

Вы делаете это с помощью любого количества инструментов, но вот один из способов сделать это автоматически из Windows:

C:\cygwin64\bin\ssh.exe user@PublicHost "echo x | nc 127.0.0.1 2222"

Можете ли вы запустить ssh на переднем плане, чтобы получить приглашение оболочки и просто выйти из сеанса ssh?

Потому что, если Windows закрывается и завершает работу ssh.exe, он должен закрыть этот порт. И если он не будет выпущен сервером, отправка вашего собственного сигнала уничтожения, вероятно, будет иметь такой же эффект (если вы можете найти его в диспетчере задач).

Или, возможно, вы могли бы войти (вручную или по сценарию) в PublicHost и убить вещи на этой стороне (например, / bin / bash вашего UID), чтобы соединение было разорвано?